class AbstractObject {}; class ConcreteObjectA : public AbstractObject {}; class ConcreteObjectB : public AbstractObject {}; class ConcreteObjectNULL : public AbstractObject {}; class Factory { public: virtual AbstractObject* do_create() = 0; AbstractObject* create_object() { return this->do_create(); } }; class FactoryA :public Factory{ public: virtual AbstractObject* do_create() { return new ConcreteObjectA; } }; class FactoryB :public Factory{ public: virtual AbstractObject* do_create() { return new ConcreteObjectB; } };
Factory* factory = new FactoryA; AbstractObject* obj = factory->create_object(); // 获得ConcreteObjectA对象
class AbstractObject { public: virtual void initialize() {} }; class Factory { public: virtual AbstractObject* do_create() = 0; AbstractObject* create_object() { AbstractObject* obj = this->do_create(); obj->initialize(); return obj; } }; class FactoryA :public Factory{ public: virtual AbstractObject* do_create() { bool isOk = true; // isOk = ...any judgement if (isOk) return new ConcreteObjectA; return new ConcreteObjectNULL; } };
【设计模式攻略】创建型模式之Factory method模式
原文:http://blog.csdn.net/my_business/article/details/19038003