C++设计模式6--原型模式Prototype--原始对象的克隆
来源:互联网 发布:淘宝龙井茶哪个品牌好 编辑:程序博客网 时间:2024/05/17 00:54
原型模式概述
用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。
Prototype原型模式是一种创建型设计模式,Prototype模式允许一个对象再创建另外一个可定制的对象,根本无需知道任何如何创建的细节,工作原理是:通过将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象通过请求原型对象拷贝它们自己来实施创建。
组成模型
客户(Client)角色:客户类提出创建对象的请求。
抽象原型(Prototype)角色:这是一个抽象角色,通常由一个C#接口或抽象类实现。此角色给出所有的具体原型类所需的接口。在C#中,抽象原型角色通常实现了ICloneable接口。
具体原型(Concrete Prototype)角色:被复制的对象。此角色需要实现抽象原型角色所要求的接口。
应对问题
它主要面对的问题是:“某些结构复杂的对象”的创建工作;由于需求的变化,这些对象经常面临着剧烈的变化,但是他们却拥有比较稳定一致的接口。
#include <iostream>#include <cstring>/// 原型抽象类 -=> 对应于抽象原型(Prototype)角色class Prototype{public : Prototype( ){ }; virtual ~Prototype( ){ }; virtual Prototype* Clone( ) const = 0; // 拷贝函数,原型模式的精髓所在 virtual void Show( ) const = 0; // 显示当前信息};/// 原型类A -=> 对应于具体原型(Concrete Prototype)角色:class PrototypeA : public Prototype{public : PrototypeA(const char *name = NULL) // 构造函数 { if(name == NULL) { this->m_name = new char[1]; strcpy(this->m_name, ""); } else { this->m_name = new char[strlen(name) + 1]; strcpy(this->m_name, name); } } PrototypeA(const PrototypeA &Prototype) // 实现深拷贝 {this->m_name = new char[strlen(Prototype.m_name)]; strcpy(this->m_name, Prototype.m_name);}virtual ~PrototypeA( ) // 虚析构函数{ delete[] this->m_name;} Prototype* Clone( ) const // 拷贝函数,原型模式的精髓所在{ return new PrototypeA(*this);} void Show( ) const // 显示当前函数信息{ std::cout <<"PrototypeA's name is " <<this->m_name <<std::endl;}protected :char *m_name;};/// 原型类B -=> 对应于具体原型(Concrete Prototype)角色:class PrototypeB : public Prototype{public : PrototypeB(int no) // 构造函数{ m_no = no;} PrototypeB(const PrototypeB &prototype) //{ this->m_no = prototype.m_no;} virtual ~PrototypeB( ) // 虚析构函数{} Prototype* Clone( ) const // 拷贝函数,原型模式的精髓所在 { return new PrototypeB(*this); } // 获取名字的函数 void Show( ) const // 显示当前函数信息{ std::cout <<"PrototypeB's no is " <<this->m_no <<std::endl;}protected :int m_no;};int main(){ Prototype *r1 = new PrototypeA("A"); Prototype *r2 = r1->Clone( ); // r1和r2是相同内容的副本 r1->Show( ); r2->Show( ); delete r1; delete r2; r1 = r2 = NULL; Prototype *r3 = new PrototypeB(10); Prototype *r4 = r3->Clone( ); // r1和r2是用相同内容的拷贝 r3->Show( ); r4->Show( ); delete r3; delete r4; r3 = r4 = NULL; return 0;}
0 0
- C++设计模式6--原型模式Prototype--原始对象的克隆
- 对象的克隆--原型模式(Prototype)
- 【设计模式】对象的克隆-原型模式
- 设计模式之五:原型模式—对象的克隆
- 设计模式之原型模式-对象的克隆
- 对象的克隆-原型模式
- 原型模式-Prototype Pattern 对象的克隆——原型模式(一):大同小异的工作周报,原型模式概述
- 原型模式-Prototype Pattern 对象的克隆——原型模式(二):工作周报的原型模式解决方案
- 深入浅出设计模式 ------ Prototype(原型模式)之深度克隆
- 原型管理器--对象的克隆--原型模式
- 《GOF设计模式》—原型(Prototype)—Delphi源码示例:初始化克隆对象
- 原型模式-Prototype Pattern 对象的克隆——原型模式(三):带附件的周报【浅克隆,深克隆】
- 设计模式 原型Prototype
- prototype(原型设计模式)
- 设计模式--Prototype(原型)
- Prototype(原型)设计模式
- 设计模式-prototype原型
- 原型模式-Prototype Pattern 对象的克隆——原型模式(四):原型管理器的引入和实现,原型模式总结
- Linux Complete Fair Scheduler (CFS) 进程调度器学习笔记(针对内核版本3.6.11)
- firefox创建快捷方式
- Cocos2dx游戏开发琐碎问题
- 【数据库】获取pg的数据表及字段信息
- jquery-easyui-validatebox【自定义验证】
- C++设计模式6--原型模式Prototype--原始对象的克隆
- Mysql日期和时间函数大全
- 这就是 MMIX
- 用Eclipse CDT 配置C/C++ 编译环境
- 构造函数 与 析构函数 constructor and destructor
- 手机不越狱如何登陆两个QQ
- Eclipse CDT配置
- openssl 错误码查询地址
- eclipse cdt mingw