您的位置:首页 > 其它

[设计模式笔记]一. 创建型模式--5.Prototype模式(原型)(一)

2013-09-12 21:19 393 查看
创建型模式--Prototype模式(原型)

一. 意图

用原型实例指定创建对象的种类, 并且通过拷贝这些原型创建新的对象.

二. 适用性

2.1 当要实例化的类是在运行时刻指定时;

2.2 为了避免创建一个与产品类层次平行的工厂类时;

2.3 当一个类的实例只能有几个不同状态组合中的一种时;

2.4 当建立相应数目的原型并克隆它们可能比每次用合适的状态手工实例化该类更方便一些.

三. 模式结构



图1

四. 角色说明

Client: 模式的使用者, 直接调用对应的对象的Clone方法来创建对象.

Prototype: 声明Clone接口.

ConcretePrototype: 实现原型克隆自身从而创建一个新的对象;

五. 说明

1 它对客户隐藏了具体的产品类(对象自己就是工厂了).

2. Prototype允许只通过客户注册原型实例就可以将一个新的具体产品并入系统. 客户可以在运行时刻建立和删除原型.

3. 改变值以指定新的行为.改变结构以指定新对象.

4. 减少子类的构造. Factory Method模式经常产生一个与产品类层次平行的Creator类. Prototype模式使得你克隆一个原型而不是请求一个工厂方法去产生一个新的对象.

5. Prototype的主要缺陷是每一个Prototype的子类都必须实现Clone操作.

六. 我的理解

6.1 Prototype模式实现的就是对象拷贝自己出来来创建一个新的对象.

6.2 如果创建一个对象,  需要new XXX, 然后需要一定的步骤初始化, 而且对象在不同的时间里创建会有很不同种状态. 那么我觉得使用Prototype模式是很方便的. 

6.3 例如在某一个一刻需要某个对象的拷贝, Clone接口是很好用的.

6.4 在定义数据结构时, 我通常习惯在结构中增加一个复制构造函数和复制操作符, 复制操作符的作用好像与Clone的作用一致, 但Clone毕竟是接口, 为保持一致性, Clone还是需要的.

6.5 Clone中的深拷贝还是浅拷贝, 看需求而定吧.

七. 相关模式

7.1 工厂模式与Prototype模式相比, Prototype模式的原型对象就是对象工厂了.

7.2 Prototype模式和Abstract Factory模式在某种方面是相互竞争的。但是它们也可以一起使用。Abstract Factory可以存储一个被克隆的原型的集合,并且返回产品对象。(这种情况相当于Abstract Factory模式内部是使用Prototype模式实现的)

7.3 大量使用Composite和Decorator模式的设计通常也可从Prototype模式处获益。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息