原型模式

来源:互联网 发布:淘宝客可以关闭吗 编辑:程序博客网 时间: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;}

调试结果:
这里写图片描述
有一点需要注意:
这种复制类型为浅复制,按照对象的每个字节进行逐个复制,如果属性中出现了指针类型,那么复制的将会是跟原来的对象相同的地址,所以要重新写一个方法,在复制时进行调用。

原创粉丝点击