设计模式之原型模式-看我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();
}

运行结果:
在这里插入图片描述

五、原型模式的优缺点

优点:

创建的对象比较复杂时,可以利用原型模式简化对象的创建过程,能够提高效率。
可以在程序运行时,获得一份内容相同的实例,且各个实例之间不会相互干扰。

缺点:

当实现深拷贝时,可能需要比较复杂的代码。
需要为每一个类配备克隆的方法,对一个新实现的类来说容易,对原有的类改造比较麻烦,需要全盘考虑。

能力有限,如有错误,多多指教。。。

posted @ 2020-02-13 16:06  ISmileLi  阅读(4)  评论(0编辑  收藏  举报