51代码网ORACLEMYSQLSQL SERVER其它数据库java/jspasp/asp.netC/C++/VC++APP应用其它语言服务器应用
您现在的位置: 51代码网 >> C >> 文章正文

传进来一个动物,如果它是猫就return new 猫();是狗就return new 狗();

更新时间:2012-1-3:  来源:51代码网

传进来一个动物,如果它是猫就return new 猫();是狗就return new 狗();
怎么做?
不要用typeof,因为要列举的太多了
C#初学,java里头可以用反射做。。。

string animal = "cat";
object a = Activator.CreateInstance(animal);
return a;

设计模式里的工厂模式专门解决你这个问题!请自行查阅"工厂模式"

没错。不过,工厂模式内部的实现也躲不了无数个 case 或者无数个 if,只有使用 Reflection,通过字符串直接创建对象,才能避开一个一个的判断。但是,按照楼主的情况,您传进来的是 "cat"、"dog" 之类的单词,而非 "LzNameSpace.SubNameSpace1.Cat" 这样的形式,所有无法直接创建,若要使用反射,必须先将 "cat" 转成 "LzNameSpace.SubNameSpace1.Cat",这一步转换也会带来不必要的穷举和罗嗦的字符串操作,因为可能 cat 在 subnamespace1 下面,而 dog 却在 subnamespace3 下面,没有规律可循。所以,总的来说,抽象工厂模式是比较适合的

public abstract class Animal
{
     public abstract string AnimalType {get;}
     public override string ToString(){ return AnimalType; }
//...
//...
//...
}

public class Cat:Animal
{
   public override string AnimalType
  {
     get{ return "Cat";}
  }
}

public class Dog:Animal
{
   public override string AnimalType
  {
     get{return "Dog";}
  }
}


..
..
..

public class EnterClass
{
  public static void Main(string[] argv)
  {
      //      ...
      //start foreach animal in animals
      Console.WriteLine(animal.ToString());
      //end foreach  }}

  • 上一篇文章:
  • 下一篇文章: 没有了
  • 赞助商链接
    推荐文章
  • 此栏目下没有推荐文章
  • {
    设为首页 | 加入收藏 | 友情链接 | 网站地图 | 联系站长 |