原型模式

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

原型模式的优点有:

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

 原型模式的类图

转载于:https://www.cnblogs.com/Andy-Li/p/7263019.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值