还没看到咔咔
This benefit applies primarily to languages like c++ that don't
treat classes as first-class objects...
啊,意思会不会是,在smalltalk里面把类原型也看成对象,而c++里不是?

解决方案 »

  1.   

    这里好像机械工业的《设计模式》翻译的很好啊!
     C++在运行的时候已经基本没有类型信息了,比如说我给你一个void*,你不可能判断出它到底指向什么对象(RTTI几乎很少使用)。而且,在C++里面新建堆对象的唯一方法是new,new语句需要静态显式指定类型名称:
      MyTest* pt = new MyTest(); //pt一定是MyTest对象
    这样,就不可能在向客户隐藏类型实现的前提下由客户建立新的对象。所以Prototype这样的pattern在C++里特别有用。
      MyTest* CreateNew(MyTest* pt) {
          return pt ->Clone(); //pt可能是MyTest,或者它的某个子类
      }  而在C#里面,由于对Reflection的支持,Type类实际起到了prototype的作用。只要有一个Type实例,即使对它表示的类型一无所知,你也可以通过Activator.CreateInstance来建立该类的实例,这就是为什么在C#这样的语言中prototype模式没有用武之地。
      Type t = ...;
      Object o = Activator.CreateInstance(t); //o是什么类型?