您的位置:首页 > 编程语言 > C语言/C++

C++设计模式浅识原型模式

2016-05-26 19:07 281 查看
定义:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建对象

原型模式其实就是从一个对象创建另外一个可定制的对象,而且不需要知道任何创建的细节

原型模式主要考虑的深复制浅复制,在C++的类设计中,拷贝构造函数就是浅复制,当重载赋值运算符时就是深复制。

浅复制:被复制对象的所有变量都含有原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象。

深复制:引用对象变量指向复制过对象,而不是原有的被引用的对象。

测试用例:

int main(){
//生成对象
ConcretePrototype * conProA = new ConcretePrototype();
//复制自身
ConcretePrototype *conProB = conProA->Clone();   //先clone后调用拷贝构造函数, Output: clone constructor

delete conProA;
conProA = NULL;

delete conProB;
conProB = NULL;

return 0;
}


原型模式(Prototype)实现

//接口
class Prototype{
public:
Prototype(){}
virtual ~Prototype(){}
virtual Prototype *Clone() = 0;
};

//实现
class ConcretePrototype: public Prototype{
public:
ConcretePrototype(): m_counter(0) {}
virtual ~ConcretePrototype(){}
//拷贝构造函数
ConcretePrototype(const ConcretePrototype &rhs){
std::cout << "constructor\n";
m_counter = rhs.m_counter;
}

//复制自身
virtual ConcretePrototype *Clone(){
//调用拷构造函数
std::cout << "clone\n";
return new ConcretePrototype(*this);
}

private:
int m_counter;
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: