原型模式是什么
原型(Prototype)模式的定义如下:用一个已经创建的实例作为原型,通过复制该原型对象来创建一个和原型相同或相似的新对象。在这里,原型实例指定了要创建的对象的种类。用这种方式创建对象非常高效,根本无须知道对象创建的细节。例如,Windows 操作系统的安装通常较耗时,如果复制就快了很多。在生活中复制的例子非常多,这里不一一列举了。
使用情景:
首先从实际生活来了解原型模式的由来,假设你有一份非常好的讲义,你的朋友也想要一份,那么怎么办?重新手抄一份?显然不是,当然是用复印机复印一份来得方便、直接,并且准确性也高,这种用原型来复制而不是重新创建的思维方式就是原型模式的核心思想。
构成:
◊ Prototype:原型类,声明一个Clone自身的接口;也可以是一个抽象类
◊ ConcretePrototype:具体原型类,实现一个Clone自身的操作。
在原型模式中,Prototype通常提供一个包含Clone方法的接口,具体的原型ConcretePrototype使用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 ConcretePrototype1 : Prototype { //有参构造函数 public ConcretePrototype1(string id) : base(id) { } public override Prototype Clone() { return (Prototype)this.MemberwiseClone(); } }
客户端
static void Main(string[] args) { ConcretePrototype1 p1 = new ConcretePrototype1("I"); ConcretePrototype1 c1 = (ConcretePrototype1)p1.Clone(); //输出克隆的是几号 Console.WriteLine("Cloned: {0}", c1.Id); }