C++设计模式之四:Prototype(原型模式)

一、意图:

用原型实例制定创建对象的种类,并且通过拷贝创建新的对象;

二、类图:

三、组成元素:

Prototype:声明克隆自身的接口;

ConcretePrototype:实现克隆自身的操作;

四、实现代码:

#include <iostream>

using namespace std;

class Prototype 
{
private:
	int num;
	char* name;
public:
	virtual Prototype* clone()=0;
	virtual Prototype* deepclone()=0;
	virtual void sayHello()=0;
};

class ConcretePrototype:public Prototype
{
private:
	char* name;
	int num;
public:
	Prototype* clone()
	{
		return new ConcretePrototype(this->name,this->num);
	}
	
	Prototype* deepclone()
	{
<strong>		int tempnum;
		char* tempname=new char[strlen(name)+1];
		
		tempnum=num;
		strcpy(tempname,name);</strong>
		
		return new ConcretePrototype(tempname,tempnum);
	}
	void sayHello()
	{
		cout<<"ConcrePrototype:"<<this->name<<":"<<this->num<<endl;
	}
	ConcretePrototype(char* na,int n)
	{
		name=na;
		num=n;
	};
};


void main()
{
	Prototype* pPrototype1=new ConcretePrototype("conan",100);
	Prototype* pPrototype11=pPrototype1->clone();
	
	pPrototype1->sayHello();
	pPrototype11->sayHello();
	
	
	Prototype* pPrototype2=new ConcretePrototype("柯南",200);
	Prototype* pPrototype22=pPrototype2->deepclone();
	pPrototype2->sayHello();
	pPrototype22->sayHello();
	
}

clone:是浅克隆;

deepclone:是深克隆;



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值