Prototype 原型模式
用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。
原型模式即在运行时动态的通过一个对象的实例来创建这个类的对象,可以理解成通过一个实例克隆出另一个实例。

Prototype模式的一些优点:
- 对客户隐藏具体的类,使客户直接可使用与特定应用相关的类。
- 运行时刻增加和删除产品。
- 改变值以指定新对象。
- 改变结构以指定新对象。
- 减少子类的构造。
- 用类动态配置应用。
在实现时要考虑一些问题:
- 使用一个原型管理器。当一个系统中原型的数目不固定时,要保持一个可用原型的注册表。客户在注册表中存储和检索原型。客户在克隆一个原型前会在注册表请求该原型。称这个注册表为原型管理器。
- 实现克隆操作时要注意深拷贝。
- 初始化克隆对象时的参数要慎重考虑。
#include <iostream>
#include <string> class Prototype {
public:
virtual ~Prototype() = ;
virtual Prototype* Clone() = ;
virtual void message() = ;
};
Prototype::~Prototype(){} class ConcretePrototype : public Prototype {
private:
std::string str;
public:
ConcretePrototype() { str = ""; }
ConcretePrototype(std::string s) { str = s; }
ConcretePrototype(const ConcretePrototype& r) {
std::cout << "拷贝构造" << std::endl;
str = r.str;
}
virtual void message() {
std::cout << str << std::endl;
}
virtual ~ConcretePrototype() {}
virtual Prototype* Clone()
{
std::cout << "克隆操作" << std::endl;
return new ConcretePrototype(*this);
}
};
测试代码
#include <iostream>
#include "Prototype.h" using namespace std; int main()
{
Prototype* p = new ConcretePrototype("秘密");
p->message();
Prototype* q = p->Clone();
q->message();
system("pause");
}
测试结果
秘密
克隆操作
拷贝构造
秘密
请按任意键继续. . .
Prototype 原型模式的更多相关文章
- Prototype原型模式(创建型模式)
1.原型模式解决的问题 现在有一个抽象的游戏设施建造系统,负责构建一个现代风格和古典风格的房屋和道路. 前提:抽象变化较慢,实现变化较快(不稳定) 整个抽象的游戏设施建造系统相对变化较慢,本例中只有一 ...
- 设计模式05: Prototype 原型模式(创建型模式)
Prototype 原型模式(创建型模式) 依赖关系的倒置抽象不应该依赖于实现细节,细节应该依赖于抽象.对所有的设计模式都是这样的. -抽象A直接依赖于实现细节b -抽象A依赖于抽象B,实现细节b依赖 ...
- 一天一个设计模式——Prototype 原型模式
一.模式说明 看了比较多的资料,对原型模式写的比较复杂,个人的理解就是模型复制,根据现有的类来直接创建新的类,而不是调用类的构造函数. 那为什么不直接调用new方法来创建类的实例呢,主要一个原因是如果 ...
- 7、Prototype 原型模式 通过复制创造实例 创造型模式
2020-07-19 发哥讲 发哥讲 其实上一节的末尾讲到如何去生成对象,其中有一个关于clone的,这其实就是Prototype原型模式. 通过克隆(拷贝)的方式生成对象 1.了解Prototype ...
- C++设计模式-Prototype原型模式
作用: 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象. Prototype模式提供了一个通过已存在对象进行新对象创建的接口(Clone), Clone()实现和具体的语言相关,在C+ ...
- prototype原型模式中的问题
对于每个构造函数来说,都有一个prototype属性.对于每个对象实例来说,都有_proto_属性. 参看下面代码: function Person(){} Person.prototype={ na ...
- 设计模式(五):PROTOTYPE原型模式 -- 创建型模式
1.定义 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象. 2.适用场景 原型模式的主要思想是基于现有的对象克隆一个新的对象出来,一般是有对象的内部提供克隆的方法,通过该方法返回一个对 ...
- 设计模式:Prototype 原型模式 - 同学你抄过别人的作业么?-clone()方法的使用
原型模式: 通过某个类的实例来创建对象 使用原型模式的好处: 好处是什么呢?当我们需要多次重复的创建一个类的示例的时候,我们可以使用new但是,new不仅仅耗费内存而且,如果new 某个类的构造方法中 ...
- 设计模式(1)--Prototype(原型模式)--创建型
1.模式定义: 原型模式就是用原型实例指定创建对象的种类,并且通过复制这些原型创建新的对象. 2.使用场景: 在原型模式中我们可以利用过一个原型对象来指明我们所要创建对象的类型,然后通过复制这个对象的 ...
随机推荐
- ANDROID_MARS学习笔记_S05_001_用SensorManager获取传感器
1. public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentV ...
- TEA算法
我们要讨论的最后一个分组密码加密算法是TEA(Tiny Encryption Algorithm).到目前为止,我们在前面所呈现的连线图可能会使你得出如下结论:分组密码加密算法必须是复杂的.TEA却能 ...
- jquery 提示插件 cluetip
jquery的 插件cluetip, 地址下载是:plugins.learningjquery.com/cluetip/demo/ 下面简单讲解下用法: 1 首先当然要放JQUERY的基本JS,和这个 ...
- nginx+gunicorn
wsgi接口,使用gunicorn作为server,想在外层加nginx. 配置了 proxy_pass http://127.0.0.1:9008; 访问报301. 参考gunicorn 官网配 ...
- android Theme使用三
☆ obtainStyledAttributes参数说明 和使用说明 1) obtainStyledAttributes(int[]attrs) int[] attrs返回的是attrs.xml里一 ...
- 你认为A和B所在方格颜色相同吗?
[你认为A和B所在方格颜色相同吗? ]据说全世界只有0.003%的人和photoshop能看出它们的颜色是相同的. 我属于那 99.9997% 的人...因为我不是神...
- HDU-1335 Basically Speaking
http://acm.hdu.edu.cn/showproblem.php?pid=1335 Basically Speaking Time Limit: 2000/1000 MS (Java/Oth ...
- Unity给力插件之MeshBaker
这是一个用来合并网格.材质.贴图的插件. 其实网上也有一些比较详细的使用说明,但是真实操作起来时,总是有一些搞不清bug.而且,作为功能比较全的插件,在Unity版本更新时,也难免会一些不兼容的地方. ...
- 搜狗一道java题目 关于对象 synchronized 关键字作用在 int, integer
第一次见到这个题目,我觉得自己没学到java,太浅了,其实这个问题没有考synchronized关键字,只是考什么是对象? 1.在java编程思想的第二章有一句话; 一切都是对象,很可惜int,c ...
- vijosP1006 晴天小猪历险记之Hill
vijosP1006 晴天小猪历险记之Hill 链接:https://vijos.org/p/1006 [思路] 图上DP. 这个题的递推顺序是关键.先从上一行得到最小值,然后从本行比较最小值,注意本 ...