设计模式-原型模式C++

一、简介

原型模式可以用于创建重复的对象,同时又能保证性能。原型模式是一种创建型模式,提供一种创建对象的最佳方式。

二、原型模式实例

某小学要在六一儿童节这天公布一批三好学生,需要一批奖状。我们知道,三好学生的奖状上一般除了班级姓名其他都是相同的内容。在这种情景下,学校只需要设计一张奖状原型出来,剩余奖状都可以进行拷贝和简单的变更。

这个情景就非常适合使用原型模式解决。

1)原型类-奖状类,提供克隆自己的接口clone,用于返回克隆了自身属性的新对象指针

class Cert
{
public:
	//构造函数
	Cert() {}
	//拷贝构造函数
	Cert(Cert* cert)
	{
		_printing = cert->_printing;
		_text = cert->_text;
		_studentName = cert->_studentName;
	}
	void SetCert(string printing, string text)
	{
		_printing = printing;
		_text = text;
	}
	//设置学生姓名
	void SetStudentName(string name)
	{
		_studentName = name;
	}

	void show()
	{
		cout << "这张奖状的印花:" << _printing << endl;
		cout << "这张奖状的文本:" << _text << endl;
		cout << "这张奖状发给谁:" << _studentName << endl;
	}
	//克隆接口
	Cert* clone()
	{
		return new Cert(*this);
	}

private:
	string _printing; //印花
	string _text; //奖状文本

	string _studentName; //学生名字
};

2)使用

int main(int argc, char *argv[])
{
	//老师选择制作一张奖状,作为张三的奖状
	Cert *certA = new Cert();
	certA->SetCert("三好学生印花", "恭喜获得本学期三好学生,望继续努力!");
	certA->SetStudentName("张三");
	certA->show();
	cout << endl;
	//老师复制了张三的奖状,只需要把名字改成李四
	Cert *certB = certA->clone();
	certB->SetStudentName("李四");
	certB->show();
}

可见,certB是certA的克隆对象,除了一些定制的内容(学生姓名),其他都不需要再次调用SetCert设置奖状细节。既不容易出错,又减少了程序的复杂度,同时,由于不用反复调用填充对象的属性,提高了程序的效率。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值