设计模式----原型模式
原型模式,听名字就知道是原来的模样,哈哈,其实这个模式就是用来复制对象用的,好了,废话不多说,我们直接看代码吧
abstract class Prototype { private string id; public Prototype(string id) { this.id = id; } public string Id { get { return id; } } public abstract Prototype Clone(); }
我们创建了一个抽象类Prototype类,这个类中最重要的一个方法Clone,我们可以看到它的返回参数就是它自己,然后我们来实现吧
class ConcretePrototype1 : Prototype { public ConcretePrototype1(string id) : base(id) { } public override Prototype Clone() { //创建当前对象的浅表副本。 return (Prototype)this.MemberwiseClone(); } }
ConcretePrototype1类重写Clone方法,然后我们可以看到它方法体中调用了MemberwiseClone方法,这个方法是object对象提供的方法,注释是浅表复制,何为浅表复制,我们后面会讲到,这里就是返回我们Concerteprototype1对象的浅表对象,然后隐私转换为Prototype,最后返回,这就是我们的原型模式了,我们看看上端调用
class Program { static void Main(string[] args) { ConcretePrototype1 p1 = new ConcretePrototype1("I"); ConcretePrototype1 c1 = (ConcretePrototype1)p1.Clone(); Console.WriteLine("Clone:{0}", c1.Id); Console.Read(); } }
首先我们创建一个ConcretePrototype1类型对象p1,然后取名为I,然后我们通过Clone方法创建C1,这一步就是复制p1对象,然后赋值给c1,最后打印就是Clone:I
好了,原型模式就是这样。。。,现在让我们来解释下浅复制吧,其实还有一种复制就是深复制,我们都知道,在C#中只有两种类型,就是值类型和引用类型,所谓的浅复制呢就是对于引用类型来说的,因为对于值类型来说是没有浅复制的;浅复制就是只保存对象的地址,只开辟用来存储地址的内存;深复制就是相当于new一个对象,会开辟新的内存空间,两者的内存地址不同;大多数时候也叫做浅拷贝和深拷贝
原型模式:使用原型实例指定创建对象的种类,并且通过克隆这些原型创建新的对象。
浅拷贝:只复制指向某个对象的指针,而不复制对象本身,新旧对象还是共享同一块内存。
深拷贝:创造一个一模一样的对象,新对象跟原对象不共享内存,修改新对象不会改到原对象。