C#设计模式(6)——原型模式
2017-01-16 15:24
239 查看
一、概念
用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象。
二、模型
![](https://images2015.cnblogs.com/blog/297644/201701/297644-20170116140626771-1523691444.png)
三、代码实现
四、原型模式的优缺点
1、原型模式的优点有:
原型模式向客户隐藏了创建新实例的复杂性
原型模式允许动态增加或较少产品类。
原型模式简化了实例的创建结构,工厂方法模式需要有一个与产品类等级结构相同的等级结构,而原型模式不需要这样。
产品类不需要事先确定产品的等级结构,因为原型模式适用于任何的等级结构
2、原型模式的缺点有:
每个类必须配备一个克隆方法
配备克隆方法需要对类的功能进行通盘考虑,这对于全新的类不是很难,但对于已有的类不一定很容易,特别当一个类引用不支持串行化的间接对象,或者引用含有循环结构的时候。
用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象。
二、模型
![](https://images2015.cnblogs.com/blog/297644/201701/297644-20170116140626771-1523691444.png)
三、代码实现
///火影忍者中鸣人的影分身和孙悟空的的变都是原型模式 class Client { static void Main(string[] args) { // 孙悟空 原型 MonkeyKingPrototype prototypeMonkeyKing = new ConcretePrototype("MonkeyKing"); // 变一个 MonkeyKingPrototype cloneMonkeyKing = prototypeMonkeyKing.Clone() as ConcretePrototype; Console.WriteLine("Cloned1:\t"+cloneMonkeyKing.Id); // 变两个 MonkeyKingPrototype cloneMonkeyKing2 = prototypeMonkeyKing.Clone() as ConcretePrototype; Console.WriteLine("Cloned2:\t" + cloneMonkeyKing2.Id); Console.ReadLine(); } } /// <summary> /// 孙悟空原型 /// </summary> public abstract class MonkeyKingPrototype { public string Id { get; set; } public MonkeyKingPrototype(string id) { this.Id = id; } // 克隆方法,即孙大圣说“变” public abstract MonkeyKingPrototype Clone(); } /// <summary> /// 创建具体原型 /// </summary> public class ConcretePrototype : MonkeyKingPrototype { public ConcretePrototype(string id) : base(id) { } /// <summary> /// 浅拷贝 /// </summary> /// <returns></returns> public override MonkeyKingPrototype Clone() { // 调用MemberwiseClone方法实现的是浅拷贝,另外还有深拷贝 return (MonkeyKingPrototype)this.MemberwiseClone(); } }
四、原型模式的优缺点
1、原型模式的优点有:
原型模式向客户隐藏了创建新实例的复杂性
原型模式允许动态增加或较少产品类。
原型模式简化了实例的创建结构,工厂方法模式需要有一个与产品类等级结构相同的等级结构,而原型模式不需要这样。
产品类不需要事先确定产品的等级结构,因为原型模式适用于任何的等级结构
2、原型模式的缺点有:
每个类必须配备一个克隆方法
配备克隆方法需要对类的功能进行通盘考虑,这对于全新的类不是很难,但对于已有的类不一定很容易,特别当一个类引用不支持串行化的间接对象,或者引用含有循环结构的时候。
相关文章推荐
- C#设计模式系列:原型模式(Prototype)
- C#设计模式(6)——原型模式(Prototype Pattern)
- C#设计模式(原型模式)
- C#设计模式--原型模式
- C#设计模式(四)原型模式
- C#设计模式(6)——原型模式(Prototype Pattern)
- C#设计模式之原型(ProtoType)
- Dot Net设计模式—原型模式
- 设计模式——原型模式
- .NET设计模式(6):原型模式(Prototype Pattern)
- 设计模式学习笔记(六)——Prototype原型模式
- 原型模式(Prototype)
- 设计模式原型模式(Prototype)- 面馆里的菜单
- 设计模式之原型法(ProtoType)----对象创建型模式
- 设计模式之Prototype(原型)
- .NET设计模式(6):原型模式(Prototype Pattern)
- 设计模式原型模式(Prototype)- 面馆里的菜单
- 设计模式PHP5实现之----原型(Prototype)
- 设计模式袖珍版 连续转载之 - Prototype(原型)
- C#设计模式之原型(ProtoType)