原型模式
来源:互联网 发布:淘宝客可以关闭吗 编辑:程序博客网 时间:2024/06/07 11:06
概念:
Prototype模式是一种对象创建型模式,他采取复制原型对象的方法来创建对象的实例。使用Prototype模式创建的实例,具有与原型模式一样的数据。
1)由原型对象自身创建对象,也就是说,对象的创建这一动作发自原型对象的本身。
2)目标对象是原型对象的一种克隆,也就是说,通过原型模式创建的对象,不仅仅与原型对象具有相同的结构,还与原型对象有相同的值。
3)根据对象克隆深度层次的不同,有浅度克隆和深度克隆
原型模式主要面对的问题是:“某些结构复杂的对象”的创建工作,由于这些对象经常面临着剧烈的变化,但是他们却拥有比较稳定一致的接口。
结构图:
实现:
class Person{protected: int age; string name; Person *p;public: virtual Person* clone() = 0; virtual void printMsg(){ cout << "age=" << age << endl; cout << "name=" << name << endl; } virtual ~Person(){}};class ConcretePerson :public Person{public: ConcretePerson(){ this->age = 0; this->name = ""; } ConcretePerson(string name, int age){ this->age = age; this->name = name; } Person* clone(){ ConcretePerson *cp = new ConcretePerson();//为新的对象分配空间 *cp = *this;//初始化对象 return cp; }};int main(void){ ConcretePerson *cp = new ConcretePerson("小强", 14); Person *p = cp->clone(); cp->printMsg(); p->clone(); p->printMsg(); system("pause"); return 0;}
调试结果:
有一点需要注意:
这种复制类型为浅复制,按照对象的每个字节进行逐个复制,如果属性中出现了指针类型,那么复制的将会是跟原来的对象相同的地址,所以要重新写一个方法,在复制时进行调用。
阅读全文
0 0