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