设计模式之原型
来源:互联网 发布:华讯网络是国企么 编辑:程序博客网 时间:2024/04/29 07:03
原型模式(Prototype Pattern):原型模式是一种对象创建型模式,用原型实例指定创建对象的种类,并且通过复制这些原型创建新的对象。原型模式允许一个对象再创建另外一个可定制的对象,无须知道任何创建的细节。
原型模式的基本工作原理是通过将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象通过请求原型对象拷贝原型自己来实现创建过程。
结构:
角色:
1.Prototype-声明一个克隆自身的接口
2.ConcretePrototype-实现 一个克隆自身的操作
3.Client-让一个原型克隆自身从而创建一个新的对象
示例代码:
using System; // "Prototype" abstract class Prototype { // Fields private string id; // Constructors public Prototype( string id ) { this.id = id; } public string Id { get{ return id; } } // Methods abstract public Prototype Clone(); } // "ConcretePrototype1" class ConcretePrototype1 : Prototype { // Constructors public ConcretePrototype1( string id ) : base ( id ) {} // Methods override public Prototype Clone() { // Shallow copy return (Prototype)this.MemberwiseClone(); } } // "ConcretePrototype2" class ConcretePrototype2 : Prototype { // Constructors public ConcretePrototype2( string id ) : base ( id ) {} // Methods override public Prototype Clone() { // Shallow copy return (Prototype)this.MemberwiseClone(); } } /// <summary> /// Client test /// </summary> class Client { public static void Main( string[] args ) { // 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 ); } }
这个例子实现了一个浅拷贝。其中MemberwiseClone()方法是Object类的一个受保护方法,实现了对象的浅拷贝。如果希望实现一个深拷贝,应该实现ICloneable接口,并自己编写ICloneable的Clone接口方法。
Prototype模式要点:
1.Prototype模式同样用于隔离类对象的使用者和具体类型(易变类)之间的耦合关系,它同样要求这些“易变类”拥有“稳定的接口”。
2.Prototype模式对于“如何创建易变类的实体对象”采用“原型克隆”的方法来做,它使得我们可以非常灵活地动态创建“拥有某些稳定接口”的新对象——所需工作仅仅是注册一个新类的对象(即原型),然后在任何需要的地方不断地Clone。
3.Prototype模式中的Clone方法可以利用.NET中的Object类的MemberwiseClone()方法或者序列化来实现深拷贝
- 设计模式之原型
- 设计模式之原型
- 设计模式 之 原型
- 设计模式之原型
- 设计模式之原型
- 设计模式之原型模式
- 设计模式之原型模式
- 设计模式之-原型模式
- 设计模式之 原型模式
- 设计模式之原型模式
- 设计模式之原型模式
- 设计模式之原型模式
- 设计模式之原型模式
- 设计模式之原型模式
- 设计模式之--原型模式
- 设计模式之原型模式
- 设计模式之原型模式
- 设计模式之原型模式
- C/C++语法: struct & typedef struct用法详解
- 一个合格的程序员应该读过哪些书
- poj2287
- WINCE 实现time函数
- 使用Proguard混淆Java源代码2——主要参数说明
- 设计模式之原型
- struts2教程:9、为应用指定多个配置文件
- iphone 推送通知 java 实现
- js获取时间及其他操作
- C#操作XML数据(转)
- 几个优化mysql的小事
- 用Directshow进行电视卡的音视频信号采集和SDI信号输出
- 4. iPhone5的适配方案(游戏+应用) cocos2d-x android
- POJ 3026 Borg Maze