prototype:原型类,声明一个clone自身的接口。

concreteprototype:具体原型类,实现一个clone自身的操作。

在原型模式中,prototype通常提供一个包含clone 方法的接口

具体原型concreteprototype使用clone方法完成对象的创建.

原型模式应用分析

  原型模式可以适用于以下情形:

  ◊ 当一个系统应该独立于它的产品创建、构成和表示时;

  ◊ 当要实例化的类是在运行时刻指定时,例如通过动态装载来创建一个类;

  ◊ 为了避免创建一个与产品类层次平行的工厂类层次时;

  ◊ 当一个类的实例只能有几个不同状态组合中的一种时。建立相应数目的原型并Clone它们可能比每次用合适的状态手工实例化该类更方便一些。

  原型模式具有以下特点:

  ◊ 对客户隐藏了具体的产品类,因此减少了客户知道的名字的数目;

  ◊ 允许客户只通过注册原型实例就可以将一个具体产品类并入到系统中,客户可以在运行时刻建立和删除原型;

  ◊ 减少了子类的构造。原型模式是Clone一个原型而不是请求工厂方法创建一个,所以它不需要一个与具体产品类平行的Creator类层次;

  ◊ 原型模式具有给一个应用软件动态加载新功能的能力。由于Prototype的独立性较高,可以很容易动态加载新功能而不影响旧系统;

  ◊ 产品类不需要非得有任何事先确定的等级结构,因为原型模式适用于任何的等级结构;

  ◊ 原型模式的最重要缺点就是每一个类必须配备一个Clone方法,而且这个Clone方法需要对类的功能进行通盘考虑。

这对全新的类来说不是很难,但对已有的类进行改造时,不一定是容易的事。

====================================================================================
public abstract class Prototype {
        private string id;
        public string Id
        {
          get { return id; }
        }
        public Prototype(string id) {
            this.id = id;
        }
        public abstract Prototype Clone();
    }
    public class Prototype1 :Prototype
    {
        public Prototype1(string id) : base(id) { }
        public override Prototype Clone()
        {
            return (Prototype)this.MemberwiseClone();
        }
    }