原型模式
Posted Andy·Li
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了原型模式相关的知识,希望对你有一定的参考价值。
原型模式用一个原型对象来指明所要创建的对象类型,然后用复制这个原型对象的方法来创建出更多的同类型对象。
原型模式的优点有:
- 原型模式向客户隐藏了创建新实例的复杂性
- 原型模式允许动态增加或较少产品类。
- 原型模式简化了实例的创建结构,工厂方法模式需要有一个与产品类等级结构相同的等级结构,而原型模式不需要这样。
- 产品类不需要事先确定产品的等级结构,因为原型模式适用于任何的等级结构
原型模式的缺点有:
- 每个类必须配备一个克隆方法
- 配备克隆方法需要对类的功能进行通盘考虑,这对于全新的类不是很难,但对于已有的类不一定很容易,特别当一个类引用不支持串行化的间接对象,或者引用含有循环结构的时候。.
1 /// 创建原型 2 /// </summary> 3 public abstract class MonkeyKingPrototype 4 { 5 public string Id { get; set; } 6 7 public MonkeyKingPrototype(string id) 8 { 9 this.Id = id; 10 } 11 //克隆方法 12 public abstract MonkeyKingPrototype Clone(); 13 } 14 15 /// <summary> 16 /// 创建具体原型 17 /// </summary> 18 public class ConcretePrototype :MonkeyKingPrototype 19 { 20 public ConcretePrototype(string id) 21 : base(id) 22 { } 23 24 public override MonkeyKingPrototype Clone() 25 { 26 return (MonkeyKingPrototype)this.MemberwiseClone(); 27 } 28 }
客户端
1 Console.WriteLine("【原型模式】"); 2 Console.WriteLine(); 3 4 //原型 5 MonkeyKingPrototype prototypeMonkeyKing = new ConcretePrototype("MonkeyKing"); 6 7 //变体1 8 MonkeyKingPrototype cloneMonkeyKing = prototypeMonkeyKing.Clone() as ConcretePrototype; 9 Console.WriteLine("Clone1:\\t" + cloneMonkeyKing.Id); 10 11 //变体2 12 MonkeyKingPrototype cloneMonkeyKing2 = prototypeMonkeyKing.Clone() as ConcretePrototype; 13 Console.WriteLine("Clone2:\\t" + cloneMonkeyKing2.Id); 14 15 Console.ReadLine();
原型模式的类图
以上是关于原型模式的主要内容,如果未能解决你的问题,请参考以下文章