设计模式之原型模式-看我72变!
一、原型模式的概念
原型模式是一种对象创建型模式, 它采取复制原型对象的方法来创建对象的实例,而不需要知道创建对象的细节过程,它是目标对象的一个“自我克隆”。
二、原型模式使用场景
1、创建一个对象的成本比较大时,可以考虑使用复制的方式获取一个新对象。
三、原型模式构建方法
1、抽象原型类
为具体原型提供一个统一抽象接口,需要具体原型类实现。
2、具体原型类
被复制的对象,需要实现抽象原型类中的统一接口。
四、原型模式的示例
// PrototypePattern.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#include <iostream>
#include <string>
using namespace std;
class Monkey
{
public:
Monkey() {}
virtual ~Monkey() {}
virtual Monkey* clone() = 0;
virtual void printName() = 0;
private:
};
class SunWuKong : public Monkey
{
public:
SunWuKong(string nameStr)
{
m_nameStr = nameStr;
}
~SunWuKong() {}
SunWuKong(const SunWuKong &other)
{
m_nameStr = other.m_nameStr;
}
Monkey* clone()
{
return new SunWuKong(*this);
}
void printName()
{
cout << m_nameStr << endl;
}
private:
string m_nameStr;
};
#define DELETE_PTR(p) {if(p!=nullptr){delete (p); (p)=nullptr;}}
int main()
{
Monkey *pMonkey = new SunWuKong("QiTianDaSheng SunWuKong!");
Monkey *pMonkey1 = pMonkey->clone();
Monkey *pMonkey2 = pMonkey1->clone();
pMonkey->printName();
pMonkey1->printName();
pMonkey2->printName();
DELETE_PTR(pMonkey);
DELETE_PTR(pMonkey1);
DELETE_PTR(pMonkey2);
std::cout << "Hello World!\n";
getchar();
}
运行结果:
五、原型模式的优缺点
优点:
创建的对象比较复杂时,可以利用原型模式简化对象的创建过程,能够提高效率。
可以在程序运行时,获得一份内容相同的实例,且各个实例之间不会相互干扰。
缺点:
当实现深拷贝时,可能需要比较复杂的代码。
需要为每一个类配备克隆的方法,对一个新实现的类来说容易,对原有的类改造比较麻烦,需要全盘考虑。
能力有限,如有错误,多多指教。。。
本文为博主原创文章,未经博主允许请勿转载!作者:ISmileLi