原型模式
原型模式:使用原型实例指定待创建对象的类型,并且通过复制这个原型来创建新的对象;
模式类型:创建者模式

一般实现
abstract class Prototype { public abstract Prototype clone(); } class ConcretePrototype:Prototype { private int str; public intStr { get{return str;} set{str=value;} } //克隆方法 public override Prototype clone() { ConcretePrototype protype=new ConcretePrototype(); protype.Str=str; return protype; } }
以上为一般手写实现方法;
而根据在复制原型对象的同时是否对引用类型进行复制,又把克隆分为浅克隆和深克隆.
通过以上手写的克隆方法,如果想实现深克隆,需要声明一个新的引用类型变量;
c#中的字符串对象存在特殊性,只要两个字符串的内容相同,无论直接赋值还是创建新对象,他们在内存中始终只有一份
c#提供了一个MemberwiseClone()方法用于实现浅克隆;
class Member { }
class ConcretePrototype { private Member member; public Member Member { get{return member;} set{Member=value;} } //克隆方法 public ConcretePrototype clone() { return (ConcretePrototype)this.MemberwiseClone(); } }
c#还提供了一个ICloneable借口,它也可以用来创建当前对象的副本,充当了抽象原型类的角色,具体原型类通常作为实现该接口的子类
class Member{} class ConcretePrototype : ICloneable//实现ICloneable接口 { private int age; public int Age { get { return age; } set { age = value; } } private Member member; internal Member Member { get { return member; } set { member = value; } } //实现深克隆 public object Clone() { ConcretePrototype copy = (ConcretePrototype)this.MemberwiseClone(); Member newMember = new Member(); copy.member = newMember; return copy; } }
感觉原型模式的使用环境为:一个对象需要多次创建,并且这个对象的成员较为复杂,这样的话通过克隆一个已有对象就可以较快的创建一个新的对象
除了通过直接创建新的成员对象来手工实现深克隆外,还可以通过反射,序列化等方法来实现深克隆,待续吧

浙公网安备 33010602011771号