创建型模式五之Prototype

来源:互联网 发布:vip58中国网络经纪人 编辑:程序博客网 时间:2024/06/15 20:57

1. UML


2. 意图

        Prototype模式通过复制原型(Prototype)而获得新对象创建的功能,这里Prototype本身就是“对象工厂”(因为能够生产对象); 实际上Prototype模式和Builder模式、AbstractFactory模式都是通过一个类(对象实例)来专门负责对象的创建工作(工厂对象),它们之间的区别是:Builder模式重在复杂对象的一步步创建(并不直接返回对象),AbstractFactory模式重在产生多个相互依赖类的对象,而Prototype模式重在从自身复制自己创建新类

3. code

Prototype.h

//Prototype.h#ifndef _PROTOTYPE_H_#define _PROTOTYPE_H_class Prototype{public:virtual ~Prototype();virtual Prototype* Clone() const = 0;protected:Prototype();};class ConcretePrototype:public Prototype{public:ConcretePrototype();ConcretePrototype(const ConcretePrototype& cp);~ConcretePrototype();Prototype* Clone() const;};#endif //~_PROTOTYPE_H_

Prototype.cpp
//Prototype.cpp#include "Prototype.h"#include <iostream>using namespace std;Prototype::Prototype(){}Prototype::~Prototype(){}Prototype* Prototype::Clone() const{return 0;}ConcretePrototype::ConcretePrototype(){}ConcretePrototype::~ConcretePrototype(){}ConcretePrototype::ConcretePrototype(const ConcretePrototype& cp){cout<<"ConcretePrototype copy ..."<<endl;}Prototype* ConcretePrototype::Clone() const{return new ConcretePrototype(*this);}

main.cpp
#include "Prototype.h"#include <iostream>using namespace std;int main(int argc,char* argv[]){    Prototype* p = new ConcretePrototype();    Prototype* p1 = p->Clone();    delete p;    delete p1;    return 0;}
原创粉丝点击