原型模式

Posted Andy·Li

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了原型模式相关的知识,希望对你有一定的参考价值。

原型模式用一个原型对象来指明所要创建的对象类型,然后用复制这个原型对象的方法来创建出更多的同类型对象。

原型模式的优点有:

  1. 原型模式向客户隐藏了创建新实例的复杂性
  2. 原型模式允许动态增加或较少产品类。
  3. 原型模式简化了实例的创建结构,工厂方法模式需要有一个与产品类等级结构相同的等级结构,而原型模式不需要这样。
  4. 产品类不需要事先确定产品的等级结构,因为原型模式适用于任何的等级结构

原型模式的缺点有:

  1. 每个类必须配备一个克隆方法
  2.  配备克隆方法需要对类的功能进行通盘考虑,这对于全新的类不是很难,但对于已有的类不一定很容易,特别当一个类引用不支持串行化的间接对象,或者引用含有循环结构的时候。.
 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();

 原型模式的类图

以上是关于原型模式的主要内容,如果未能解决你的问题,请参考以下文章

设计模式之原型模式(Prototype)详解及代码示例

设计模式课程 设计模式精讲 9-2 原型模式coding

设计模式--原型模式

5.原型模式

设计模式原型模式

csharp 设计模式 - 原型 - 结构代码