创建型设计模式——原型模式
用原型实例指定创建对象的种类,并且通过复制这些原型创建新的对象。
适用于
①当一个系统应该独立于它的产品创建、构成和表示时。
②当要实例化的类是在运行时刻指定时,例如,通过动态加载。
③为了避免创建一个与产品类层次平行的工厂类层次时。
④当一个类的实例只能有几个不同状态组合中的一种时。建立相应数目的原型并克隆它们,可能比每次用合适的状态手工实例化该类更方便一些。
类图如下

浅拷贝实现如下
1 internal class Program 2 { 3 static void Main(string[] args) 4 { 5 ConcretePrototype concretePrototype = new ConcretePrototype(); 6 7 ConcretePrototype concretePrototype1 = (ConcretePrototype)concretePrototype.Clone(); 8 9 concretePrototype.Attr = "属性111"; 10 concretePrototype1.Attr = "属性222"; 11 12 Console.WriteLine(concretePrototype.ToString()); 13 Console.WriteLine(concretePrototype1.ToString()); 14 15 Console.WriteLine($"concretePrototype==concretePrototype1 ?? {concretePrototype == concretePrototype1}"); 16 } 17 }
1 /// <summary> 2 /// 声明一个克隆接口,提供克隆方法,由具体子类实现 3 /// </summary> 4 internal interface IPrototype 5 { 6 IPrototype Clone(); 7 }
1 /// <summary> 2 /// 具体克隆类,实现clone方法,返回克隆对象 3 /// </summary> 4 internal class ConcretePrototype : IPrototype 5 { 6 public string Attr { get; set; } 7 public ConcretePrototype() 8 { 9 Console.WriteLine("创建实例,调用构造函数"); 10 } 11 12 public IPrototype Clone() 13 { 14 //object提供的克隆对象方法,没有调用构造函数 15 return (IPrototype)MemberwiseClone(); 16 } 17 18 public override string ToString() 19 { 20 return $"Attr={Attr}"; 21 } 22 }

浙公网安备 33010602011771号