码迷,mamicode.com
首页 > 其他好文 > 详细

原型模式

时间:2017-07-31 15:55:13      阅读:167      评论:0      收藏:0      [点我收藏+]

标签:类型   get   ons   readline   引用   允许   clone   有一个   image   

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

原型模式的优点有:

  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();

 原型模式的类图

技术分享

原型模式

标签:类型   get   ons   readline   引用   允许   clone   有一个   image   

原文地址:http://www.cnblogs.com/Andy-Li/p/7263019.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!