设计模式之原型模式-看我72变!

本文深入探讨了原型模式的概念、使用场景及构建方法,通过示例展示了如何利用该模式简化复杂对象的创建过程,提高效率,并分析了其优缺点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、原型模式的概念

原型模式是一种对象创建型模式, 它采取复制原型对象的方法来创建对象的实例,而不需要知道创建对象的细节过程,它是目标对象的一个“自我克隆”。

二、原型模式使用场景

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();
}

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

五、原型模式的优缺点

优点:

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

缺点:

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值