C++实现 原型模式(ProToType)
Posted 小丑快学习
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++实现 原型模式(ProToType)相关的知识,希望对你有一定的参考价值。
原型模式的意图便是通过已有的对象创建一个新的对象,创建的新的对象和原来的对象具有相同的属性,但是不具有形同的地址空间,也就是说创建的对象应该是深拷贝,而非简单的的拷贝指针。prototype一般主要包括三个方面:
- ProToType类:抽象基类,声名了克隆自身的接口
- ConcreteProToTepe(根据实际需求名称有所不同):继承并实现ProTotype中的相应的接口
- Client:调用接口实现克隆。
结构模型:
代码示例:
//抽象基类
class ProToType
public:
virtual ProToType* clone() = 0;
virtual ~ProToType() ;
virtual void print() ;
//只能由其子类创建抽象基类的对象
protected:
ProToType()
;
class ConcreteProTotype_A :public ProToType
public:
ConcreteProTotype_A():s(nullptr)
ConcreteProTotype_A(string* s_) :s(s_)
//拷贝构造函数,需要实现深拷贝
ConcreteProTotype_A(const ConcreteProTotype_A& other):s(new string(*other.s))
ProToType* clone()
return new ConcreteProTotype_A(*this);
void print()
cout << "address:"<<s<<" value:"<<*s << endl;
~ConcreteProTotype_A()
if ( s )
delete s;
private:
string * s;
;
测试客户代码:
ProToType* p = new ConcreteProTotype_A(new string("this is Type A;"));
ProToType* p1 = p->clone();
p->print();
p1->print();
delete p;
delete p1;
运行结果:
两者的地址空间不同,但是两者的内容是相同的,说明是深拷贝而非浅拷贝。
以上是关于C++实现 原型模式(ProToType)的主要内容,如果未能解决你的问题,请参考以下文章