原型模式
Specify the kinds of objects to create using a prototypical instance, and create new objects by copying this prototype.(用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。)
UML类图
C++代码实现
#include <iostream> using namespace std; class Prototype { public: virtual Prototype* clone() const = 0; }; class ConcretePrototype : public Prototype { public: ConcretePrototype() { _count = 1; } ConcretePrototype* clone() const { return new ConcretePrototype(*this); } ConcretePrototype(const ConcretePrototype& cp) { _count = cp._count; //cout << "ConcretePrototype copy" << endl; } void SetCount(int i) { _count = i; } void Print() { cout << _count << endl; } private: int _count; }; #include "Prototype.h" int main() { ConcretePrototype* p = new ConcretePrototype(); //不通过new关键字来产生一个对象,而是通过对象复制来实现的模式 ————原型模式 for (int i=0; i<10; ++i) { ConcretePrototype* p1 = p->clone(); p1->SetCount(i); p1->Print(); } delete p; return 0; }
Prototype 模式通过复制原型(Prototype)而获得新对象创建的功能,这里Prototype 本身就是 “对象工厂”(因为能够生产对象),实际上Prototype模式和 Builder模 式、AbstractFactory 模式都是通过一个类 (对象实例)来专门负责对象的创建工作 (工厂对象),它们之间的区别是:Builder模式重在复杂对象的一步步创建(并不直接返回对象),AbstractFactory
模式重在产生多个相互依赖类的对象,而 Prototype 模式重在从自身复制己创建新类。