原型模式——创建型设计模式四
2012-12-31 20:10
218 查看
一、原型模式
用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。
用实例来说话:我要发简历,自己写了一份模板,然后复制了N 份。如下:
如果现在我想改,那就得把N份全改了,本来只是改动一点,却需要很长时间,没效率,真是费力不讨好的工作。
原型模式可以改变这种低级费力的工作。
原型模式其实就是从一个对象在创建灵位一个可定制的对象,而且不需知道任何创建的细节。在原型模式通过克隆Clone来实现对象之间的这种定制。
区别:以前的复制是每个对象都去实例化类,现在的克隆,是只实例化一个对象,然后通过这个对象传递给其他对象。
具体如下:
Clone方法时将当前对象的非静态字段复制到该新对象,如果字段是值类型,则对该字段执行逐位复制。如果字段是引用类型,则复制引用但不复制引用的对象。
有人有问了,那我要向实现将引用的对象也克隆过来怎么办?
上边的方法在模板中添加Clone 是一种浅复制,还有一种深复制,可以解决克隆引用对象的问题。
深复制
深复制需要增加三步:
1、让引用的类也继承系统的克隆类Icloneable,在类中添加克隆方法。
2、在调用类中,增加以被调用类为参数的私用构造函数,结果返回被调用类克隆方法,从而实现克隆。
3、在调用类的克隆方法中,调用私用构造方法,让引用克隆完成。
假如工作经历类为要调用的类:
1、让工作经历类继承接口
2、在简历类中增加私有构造函数
3、修改简历类中的克隆方法。
二、类图
用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。
用实例来说话:我要发简历,自己写了一份模板,然后复制了N 份。如下:
//模板:class Resume { Private string name; Public Resume (string name) { This.name=name; } } //客户端: Static void Main(string[] args) { Resume a=new Resume("大鸟"); Resume b=new Resume("大鸟"); Resume b=new Resume("大鸟"); }
如果现在我想改,那就得把N份全改了,本来只是改动一点,却需要很长时间,没效率,真是费力不讨好的工作。
原型模式可以改变这种低级费力的工作。
原型模式其实就是从一个对象在创建灵位一个可定制的对象,而且不需知道任何创建的细节。在原型模式通过克隆Clone来实现对象之间的这种定制。
区别:以前的复制是每个对象都去实例化类,现在的克隆,是只实例化一个对象,然后通过这个对象传递给其他对象。
具体如下:
class Resume { Private string name; Public Resume (string name) { This.name=name; } //模板中增加克隆方法 Public object Clone() { Return (Object)this.MemberwiseClone(); } } Static void Main(string[] args) { Resume a=new Resume("大鸟"); Resume b=(Resume)a.clone(); Resume c=(Resume)a.clone(); }
Clone方法时将当前对象的非静态字段复制到该新对象,如果字段是值类型,则对该字段执行逐位复制。如果字段是引用类型,则复制引用但不复制引用的对象。
有人有问了,那我要向实现将引用的对象也克隆过来怎么办?
上边的方法在模板中添加Clone 是一种浅复制,还有一种深复制,可以解决克隆引用对象的问题。
深复制
深复制需要增加三步:
1、让引用的类也继承系统的克隆类Icloneable,在类中添加克隆方法。
2、在调用类中,增加以被调用类为参数的私用构造函数,结果返回被调用类克隆方法,从而实现克隆。
3、在调用类的克隆方法中,调用私用构造方法,让引用克隆完成。
假如工作经历类为要调用的类:
1、让工作经历类继承接口
Class WorkExperience :Icloneable { //增加克隆方法 Public Object Clone() { Return (Object) this.MemberwiseClone(); } }
2、在简历类中增加私有构造函数
Private Resume(WorkExperience work) { This.work=(WorkExperience)work.Clone(); }
3、修改简历类中的克隆方法。
public Object Clone() { Resume obj=new Resume(this.work); …… }
二、类图
![](http://img.my.csdn.net/uploads/201212/31/1356955792_2632.png)
相关文章推荐
- 设计模式之创建型原型模式
- 设计模式(2)-创建型-原型模式(Prototype)
- 23种设计模式之原型模式(创建型,5 Prototype,c++实现)
- C#设计模式之五原型模式(Prototype Pattern)【创建型】
- 设计模式-创建型模式-原型
- 【设计模式基础】创建型模式 - 6 - 原型(Prototype)
- 设计模式五:Prototype原型模式——对象创建型模式
- 设计模式(四)原型模式(创建型)
- 设计模式(七)原型模式(创建型)
- 设计模式——创建型设计模式总结(简单工厂、普通工厂、抽象工厂、建造者、原型和单例)
- 设计模式(Design Pattern) - 创建型模式(Creational Pattern) - 原型模式(Prototype) - Java实现
- 设计模式--创建型模式之原型模式
- 设计模式(2)-创建型-原型模式(Prototype)
- 面向对象设计模式之Prototype原型模式(创建型)
- 设计模式05: Prototype 原型模式(创建型模式)
- 【创建型模式】原型模式(Prototype)之23种java设计模式
- C#面向对象设计模式纵横谈(6):Prototype 原型(创建型模式)
- 设计模式之对象创建型 — prototype 原型模式
- 设计模式--原型模式Prototype(创建型)
- 设计模式(四)原型模式(Prototype)-创建型