设计模式实例与代码:Prototype模式
2012-04-12 00:34
627 查看
意图/定义:通过复制一个原型的实例来创建新的对象,而不是新建新实例,被复制的实例称之谓原型
问题:当新建一个实例步骤较多或代价较高,而复制一个已有实例比较快捷或代价较低
解决方案:为对象原型提供复制自己的操作
参与者与协作者:具体原型需要实现复制自己对象的操作,客户只请求已有原型复制其自身,即得到新的实例
效果:简化了客户对于创建新对象所需要了解的知识,客户不再需要重新自己费劲的创建一个新实例(如传递各种初始化参数)
实现:创建需要可以自我复制的类,为这些类提供clone实现,使得其可以以合适的方式返回自己的一个复本,当需要新对象的时候,从原型实例复制即可。
结构性的示例代码如下:
问题:当新建一个实例步骤较多或代价较高,而复制一个已有实例比较快捷或代价较低
解决方案:为对象原型提供复制自己的操作
参与者与协作者:具体原型需要实现复制自己对象的操作,客户只请求已有原型复制其自身,即得到新的实例
效果:简化了客户对于创建新对象所需要了解的知识,客户不再需要重新自己费劲的创建一个新实例(如传递各种初始化参数)
实现:创建需要可以自我复制的类,为这些类提供clone实现,使得其可以以合适的方式返回自己的一个复本,当需要新对象的时候,从原型实例复制即可。
结构性的示例代码如下:
using System; namespace Prototype { /// <summary> /// MainApp startup class for Structural /// Prototype Design Pattern. /// </summary> class MainApp { /// <summary> /// Entry point into console application. /// </summary> static void Main() { // Create two instances and clone each ConcretePrototype1 p1 = new ConcretePrototype1("I"); ConcretePrototype1 c1 = (ConcretePrototype1)p1.Clone(); Console.WriteLine("Cloned: {0}", c1.Id); ConcretePrototype2 p2 = new ConcretePrototype2("II"); ConcretePrototype2 c2 = (ConcretePrototype2)p2.Clone(); Console.WriteLine("Cloned: {0}", c2.Id); // Wait for user Console.ReadKey(); } } /// <summary> /// The 'Prototype' abstract class /// </summary> abstract class Prototype { private string _id; // Constructor public Prototype(string id) { this._id = id; } // Gets id public string Id { get { return _id; } } public abstract Prototype Clone(); } /// <summary> /// A 'ConcretePrototype' class /// </summary> class ConcretePrototype1 : Prototype { // Constructor public ConcretePrototype1(string id) : base(id) { } // Returns a shallow copy public override Prototype Clone() { return (Prototype)this.MemberwiseClone(); } } /// <summary> /// A 'ConcretePrototype' class /// </summary> class ConcretePrototype2 : Prototype { // Constructor public ConcretePrototype2(string id) : base(id) { } // Returns a shallow copy public override Prototype Clone() { return (Prototype)this.MemberwiseClone(); } } }
相关文章推荐
- 绝对精辟,鲜活代码和实例讲授门面设计模式
- 设计模式实例与代码:Builder模式
- Java设计模式之装饰者模式详解和代码实例
- PHP设计模式之观察者模式(Observer)详细介绍和代码实例
- 设计模式与实例代码:Composite模式
- 【设计模式】java单实例模式代码示例
- 简单Java代码实例助你通俗易懂的理解什么是装饰(者)设计模式 (Decorator)
- 设计模式与实例代码:Bridge模式
- 145 php 设计模式代码和应用场景实例
- 设计模式与实例代码:Visitor模式
- PHP设计模式之适配器模式代码实例
- PHP设计模式之观察者模式(Observer)详细介绍和代码实例
- 设计模式与实例代码:Adapter模式
- Ruby使用设计模式中的代理模式与装饰模式的代码实例
- 23种设计模式java实例代码之装饰模式
- 【设计模式】java生产者和消费者的代码实例
- PHP设计模式之适配器模式代码实例
- 30. 代码实例-设计模式-回调方式使用模板方法
- 设计模式与实例代码:Observer模式
- PHP设计模式之装饰者模式代码实例