设计模式——创建型——原型模式
来源:互联网 发布:mac 磁盘具有mbr分区表 编辑:程序博客网 时间:2024/06/06 05:05
原型模式:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。其中有一个词很重要,那就是拷贝。可以说,拷贝是原型模式的精髓所在。
问题:当对象的构造函数非常复杂,在生成新对象的时候非常耗时间、耗资源的情况
解决方案: 通过复制(克隆、拷贝)一个指定类型的对象来创建更多同类型的对象。这个指定的对象可被称为“原型”对象,也就是通过复制原型对象来得到更多同类型的对象。
#include <iostream>using namespace std;class Resume{protected:char* name;// 名字不会变int age; //年龄可能会变public:Resume(){}virtual ~Resume(){}virtual Resume* Clone(){return NULL;}virtual void Set(int c_age) //提供个接口,改变年龄{}virtual void Show(){}};class ResumeA:public Resume{public:ResumeA(const char* str) //构造函数{if (NULL == str){name = new char[1];name[0] = '\0';}else{name = new char[strlen(str)+1];strcpy(name,str);}age = 10;}
ResumeA(const ResumeA& r) //拷贝构造函数{name = new char[strlen((r.name)+1)];strcpy(name,r.name);age = r.age;}~ResumeA() //析构函数{delete[] name;}Resume* Clone() //克隆{return new ResumeA(*this);}void Show() //显示{cout<<"ResumeA name:"<<name<<endl;cout<<"ResumeA age:"<<age<<endl;}void Set(int c_age){age = c_age;}};void main(){Resume* r1 = new ResumeA("A");Resume* r3 = r1->Clone();r1->Show();delete r1; //深拷贝,所以对r3无影响。r1 = NULL;r3->Set(20);r3->Show();return;}
- 设计模式——创建型——原型模式
- 原型模式——创建型设计模式四
- java设计模式——创建型之原型模式
- JAVA设计模式(5) —<创建型>原型模式(Prototype)
- 【设计模式】—-(5)原型模式(创建型)
- 设计模式之对象创建型 — prototype 原型模式
- 设计模式之创建类模式——原型模式
- 设计模式—原型模式
- 设计模式—原型模式
- 设计模式—原型模式
- 设计模式—原型模式
- 创建型模式——原型模式
- 创建型模式—原型模式
- 设计模式(对象创建)——原型模式
- 设计模式6——创建型模式之原型模式
- python创建型设计模式——原型模式、单例模式
- 【设计模式】创建型模式——原型模式(Prototype Pattern)
- 设计模式——创建型模式之原型模式(Prototype Pattern)
- response.setContentType()中MIME参数类型总结
- 从源码安装mysql-5.1.67
- thrift and php 环境搭建
- 代码走查
- 游戏外挂基本原理及实现
- 设计模式——创建型——原型模式
- C/C++热门精品资料地址集(110个)
- firefox for android的典型配置
- hdu2412 树形背包
- Oracle 11g AWR 系列七:Active Session History (ASH) 报告
- mount 带有分区的loopback设备
- width固定
- firefox(Mozilla)分析
- 传统Model 1和Model 2