Prototype(原型)设计模式
2015-08-16 18:51
274 查看
声明:本博文篇幅短,适合快速回顾、朝花夕拾,不适合当作详解。
一、概念
使用原型实例指定创建对象的种类,然后通过拷贝这些原型来创建新的对象。就是从一个对象再创建另外一个可定制的对象,而且不需要知道任何创建的细节。
二、模式结构图
三、例子
需要注意的是,如果拷贝对象比较复杂,要注意浅拷贝和深拷贝。
四、优缺点
1、优点
a、原型模式允许动态地增加或减少产品类
b、简化了创建结构
2、缺点
a、需要为每一个类配备一个克隆方法,而且这个克隆方法需要对类的功能进行通盘考虑,这对全新的类来说不是很难,但对已有的类进行改造时,不一定是件容易的事,特别当一个类引用不支持串行化的间接对象,或者引用含有循环结构的时候。
一、概念
使用原型实例指定创建对象的种类,然后通过拷贝这些原型来创建新的对象。就是从一个对象再创建另外一个可定制的对象,而且不需要知道任何创建的细节。
二、模式结构图
三、例子
class Prototype { public: virtual ~Prototype(); virtual Prototype * clone() const = 0; protected: Prototype(); }; class ConcretePrototype : public Prototype { public: ConcretePrototype(); ConcretePrototype(const ConcretePrototype & cp) { a = cp.a; b = cp.b; } Prototype * clone() const { return new ConcretePrototype(*this); } public: int a; char b; }; void main() { Prototype * p = new ConcretePrototype(); Prototype * p2 = p->clone(); }
需要注意的是,如果拷贝对象比较复杂,要注意浅拷贝和深拷贝。
四、优缺点
1、优点
a、原型模式允许动态地增加或减少产品类
b、简化了创建结构
2、缺点
a、需要为每一个类配备一个克隆方法,而且这个克隆方法需要对类的功能进行通盘考虑,这对全新的类来说不是很难,但对已有的类进行改造时,不一定是件容易的事,特别当一个类引用不支持串行化的间接对象,或者引用含有循环结构的时候。
相关文章推荐
- 斐波那契数列的性质
- root密码忘记了要怎么搞
- Android(java)学习笔记166:Java中输入和输出流概念
- 十年只是刹那间
- How to make money as an independent developer
- Linux下MySQL的配置
- GoAgent下local文件下proxy.ini文件各项参数介绍
- 为Notepad++配备VS的Visual C++ 编译器
- 为notepad++添加g++编译器编译objc/c/c++/C#
- 【WP开发问题1】 请确保已为开发人员解锁此设备。有关开发人员解锁的详细信息,
- VS2013+openCV3.0无脑配置方法+解决警告问题【windows平台】
- 如何直接从 Google Play 下载 APK 文件?
- Ubuntu 14.04安装Chromium浏览器并添加Flash插件Pepper Flash Player
- 【转载】中文ubuntu里用户目录里的路径改成英文
- 【原】更改ubuntu15.04的开机启动等待时间和启动项
- oracle备份和升级数据库
- Android API的View类
- springMVC 笔记
- sql server
- 【数据结构】线性表顺序结构的操作---C/C++语言