设计模式---原型模式(C++实现)
来源:互联网 发布:现有sql server 实例 编辑:程序博客网 时间:2024/05/13 19:58
找了一图:这就很好理解了
什么是原型模式?
在GOF的《设计模式:可复用面向对象软件的基础》中是这样说的:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。这这个定义中,最重要的一个词是“拷贝”,也就是口头上的复制,而这个拷贝,也就是原型模式的精髓所在。
为什么要使用原型模式?
原型模式和建造者模式、工厂方法模式一样,都属于创建型模式的一种。简单的来说,我们使用原型模式,就是为了创建对象。
下面的场景中使用原型模式最好:
1. 当我们的对象类型不是开始就能确定的,而这个类型是在运行期确定的话,那么我们通过这个类型的对象克隆出一个新的对象比较容易一些;
2. 有的时候,我们需要一个对象在某个状态下的副本,此时,我们使用原型模式是最好的选择
3. 当我们处理一些比较简单的对象时,并且对象之间的区别很小,可能就几个属性不同而已,那么就可以使用原型模式来完成,省去了创建对象时的麻烦了
4.有的时候,创建对象时,构造函数的参数很多,而自己又不完全的知道每个参数的意义,就可以使用原型模式来创建一个新的对象,不必去理会创建的过程,让创建过程见鬼去吧。
用UML类图表示原型模式
C++实现
class Prototype{public:Prototype(){}virtual ~Prototype(){}virtual Prototype *Clone() = 0;};class ConcretePrototype : public Prototype{public :ConcretePrototype():m_count(0){}virtual ~ConcretePrototype(){}//拷贝构造ConcretePrototype(const ConcretePrototype &cp){m_count = cp.m_count;}//赋值自身virtual ConcretePrototype * Clone(){//调用拷贝构造函数return new ConcretePrototype(*this);}private:int m_count;};
测试:
int test_Prototype(){//生成对象ConcretePrototype *pa = new ConcretePrototype();//复制自身ConcretePrototype* pb = pa->Clone();delete pa;delete pb;pa = NULL;pb = NULL;system("pause");return 0;}
其实,在我看来 这就是我们在自己实现string类时遇到的深浅拷贝的事,只是这里用了Clone()函数,我们就直接写出深拷贝的拷贝构造函数。
0 0
- 实现设计模式:原型模式
- C语言设计模式:原型模式
- 设计模式之原型模式(C++)
- C#--设计模式之原型模式
- 设计模式之原型模式,C++实现
- C++设计模式实现--原型模式
- C++设计模式实现--原型模式
- 设计模式C++实现六: 原型模式
- scala实现设计模式之原型模式
- 大话设计模式c++实现--原型模式
- 设计模式----原型模式(C++实现)
- 设计模式---原型模式(C++实现)
- 常见设计模式解析和实现(C++)Prototype模式(原型模式)
- 常见设计模式解析和实现(C++)Prototype模式(原型模式)
- 设计模式:原型模式
- 设计模式------原型模式
- 设计模式 原型模式
- 设计模式-【原型模式】
- 阶乘与兔子问题
- CodeForces 144CAnagram Search
- Redis Sentinel环境下的Key过期事件消息订阅分析(重点介绍了sentinel.conf的配置参数)
- tensorflow学习笔记十二:没GPU也能玩梵高作画:Ubuntu tensorflow CPU版
- Intent Filters大揭秘
- 设计模式---原型模式(C++实现)
- C++操作注册表实现开机自启动程序
- 1-016. 查验身份证
- vue学习总结:响应式系统&vue实例
- POJ:2719 Faulty Odometer(数学,排列组合)
- POJ-2182 Lost Cows 简单的想法
- 华为机试-查找输入整数二进制中1的个数
- 如何评价小智从主播成千万大股东
- Android 6.0+ 运行时权限——EasyPermissions源码解析