一、原理讲解
原型模式其实就是对类对象某个时刻的状态进行备份或者拷贝下来。比如该类的对象进行一系列赋值操作,然后需要保存某个瞬时状态,则用原型模式克隆下来。其中类对象某个瞬时状态用this表示,通过this赋值给*proto,调用该类的拷贝构造函数进行原型拷贝。
注意:函数返回(*this)和(this)区别
- 函数返回(*this):实际上是返回该类对象的原型或者拷贝(返回值为Proto&或者Proto),返回拷贝时调用的是类的拷贝构造函数Proto::Proto(const
Proto& proto) - 函数返回this:实际上是返回指向类对象的指针
1.1意图
用原型对象创建对象的种类,并且通过拷贝创建新的对象。
1.2应用场景
当一个系统应该独立与他的产品创建、构成和表示时;
当要实例化的类是在运行时指定时,例如,通过动态装载;
为了避免创建一个与产品类层次平行的工厂类层次时;
当一个类的实例只能有几个不同状态组合中的一种时,建立相应数目的原型并克隆他们可能比每次用合适的状态手工实例化该类更方便一些;’
1.3结构图(UML图)
1.4代码实现步骤
a1 定义一个抽象产品接口类IProto,并且定义一个接口函数clone()用于子类继承;(抽象类)
a2 定义一个实现接口类IConcreteProto,重写接口函数clone();(具体产品类)
a3 可以用实现接口类的默认拷贝构造函数,也可以构造自己的拷贝构造函数;
二、实现代码
ProtoPattern.cpp
#include <iostream>
using namespace std;
#define DELETE(pointer) delete pointer; pointer=nullptr
class IProto
{
public:
IProto() {
}<