定义:原型模式是一种创建型设计模式,Prototype模式允许一个对象再创建另外一个可定制的对象,根本无需知道任何如何创建的细节,工作原理是:通过将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象通过请求原型对象拷贝它们自己来实施创建。
话不多说 上才艺
我们这里通过一个小案例来解释一下Prototype模式
class Program { static void Main(string[] args) { //包子有一个小人 有红色衣服 绿色头发 黑色鞋子 123456根头发 很漂亮 LittlePerson littlePersonBao = new LittlePerson() { ClothingColour="Red", ShoeColour="Black", hair=new Hair { HairColour="Green", HairNumber=123456 } }; littlePersonBao.GetLittlePersonInfo(); //这时候跳跳看到了,道“我想要我想要白色衣服 绿色头发 黑色鞋子 的小人”(这时候我们创建重复对象的时候如果通过set方法一个一个copy属性值,这样如果类中属性特别多的话非常不好用,而且效率也不高。) LittlePerson littlePersonTiao = littlePersonBao.Clone(); littlePersonTiao.ClothingColour = "white"; littlePersonTiao.hair.HairNumber = 654321; littlePersonTiao.GetLittlePersonInfo(); littlePersonBao.GetLittlePersonInfo(); } } /// <summary> /// 是所有具体原型类的公共父类,它可是抽象类也可以是接口,甚至可以是具体实现类。 /// </summary> public abstract class Prototype<T> { /// <summary> /// 提供副本 /// </summary> /// <returns></returns> public abstract T Clone(); } /// <summary> /// 小人类 /// </summary> public class LittlePerson : Prototype<LittlePerson> { /// <summary> /// 衣服颜色 /// </summary> public string ClothingColour { get; set; } /// <summary> /// 鞋子颜色 /// </summary> public string ShoeColour { get; set; } public Hair hair { get; set; } public override LittlePerson Clone() { //这里使用的是浅拷贝 return (LittlePerson)this.MemberwiseClone(); } public void GetLittlePersonInfo() { Console.Write($"ClothingColour:{ClothingColour} "); Console.Write($"ShoeColour:{ShoeColour} "); Console.WriteLine($"HairColour:{hair.HairColour} "); Console.WriteLine($"HairNumber:{hair.HairNumber} "); } } public class Hair { /// <summary> /// 头发颜色 /// </summary> public string HairColour { get; set; } /// <summary> /// 头发数量 /// </summary> public int HairNumber { get; set; } }
这个案例采用的是浅拷贝的方式来拷贝复杂对象。
浅拷贝:将当前对象的非静态字段复制到新的对象,其引用类型的字段会复制引用,不会复制引用的对象,如果字段是值类型,则执行字段的逐位副本;
通过这个案例我们可以看出,原型模式主要用于创建重复的对象,我们通常创建重复对象的时候都是通过set方法一个一个copy属性值的,这样如果类中属性特别多的话非常不好用,而且效率也不高。
原文:https://www.cnblogs.com/Z-ba-S-wei-K/p/12747536.html