原型模式:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象,而不需要知道任何创建细节
一般在初始化的信息不发生改变的情况下克隆是最好的办法,这既隐藏了对象的创建细节,又对性能是大大的提高,就是不用重新初始化对象,而是动态的获得对象运行时的状态
namespace 原型模式 { class Program { static void Main(string[] args) { ConcretePrototype1 p1 = new ConcretePrototype1("I"); ConcretePrototype1 c1 = (ConcretePrototype1)p1.Clone(); Console.WriteLine("Cloned: {0}", c1.Id); ConcretePrototype2 p2 = new ConcretePrototype2("II"); ConcretePrototype2 c2 = (ConcretePrototype2)p2.Clone(); Console.WriteLine("Cloned: {0}", c2.Id); // Wait for user Console.Read(); } } abstract class Prototype { private string id; // Constructor public Prototype(string id) { this.id = id; } // Property public string Id { get { return id; } } public abstract Prototype Clone(); } class ConcretePrototype1 : Prototype { // Constructor public ConcretePrototype1(string id) : base(id) { } public override Prototype Clone() { // Shallow copy return (Prototype)this.MemberwiseClone(); } } class ConcretePrototype2 : Prototype { // Constructor public ConcretePrototype2(string id) : base(id) { } public override Prototype Clone() { // Shallow copy return (Prototype)this.MemberwiseClone(); } } }