class AbstractObject {};
class ConcreteObjectA : public AbstractObject {};
class ConcreteObjectB : public AbstractObject {};
class ConcreteObjectNULL : public AbstractObject {};
class Factory {
public:
AbstractObject* create_object(const string& type) {
if (type == "A") {
return new ConcreteObjectA;
} else if type == "B") {
return new ConcreteObjectB;
}
return new ConcreteObjectNULL;
}
};Factory factory;
AbstractObject* obj_A = factory.create_object("A");
AbstractObject* obj_B = factory.create_object("B");
class Factory {
public:
AbstractObject* create_object(const string& type) {
std::map<string, Factory*>::iterator it;
it = factory_map.find(type);
if (it != factory_map.end()) {
return factory_map[type]->do_create();
}
return factory_map["NULL"]->do_create();
}
void register_factory(const string& type, Factory* factory) {
factory_map[type] = factory;
}
private:
virtual AbstractObject* do_create() = 0;
static std::map<string, Factory*> factory_map;
};
class FactoryA :public Factory{
public:
FactoryA() {
register_factory("A", this);
}
virtual AbstractObject* do_create() {
return new ConcreteObjectA;
}
};
class FactoryB :public Factory{
public:
FactoryB() {
register_factory("B", this);
}
virtual AbstractObject* do_create() {
return new ConcreteObjectB;
}
};
class FactoryNULL :public Factory{
public:
FactoryNULL() {
register_factory("NULL", this);
}
virtual AbstractObject* do_create() {
return new ConcreteObjectNULL;
}
};FactoryA factory_A; FactoryB factory_B; FactoryNULL factory_NULL; // 以上对象的定义一般作为全局对象定义在对应Factory类实现的cpp文件中
Factory factory;
AbstractObject* obj_A = factory.create_object("A");
AbstractObject* obj_B = factory.create_object("B");
原文:http://blog.csdn.net/my_business/article/details/18988013