这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。
缺点:一旦新增类,需要在工厂类中添加生成新类的代码。封装性不好。
c++实现简单的工厂模式 1.定义基础工厂,其他事件继承工厂,对函数重定义class IObject
{
public:
virtual void run() = 0;
virtual ~IObject() {};
};
2.应用工厂示例(在主函数前已经实例化)
在这里插入代码片3.工厂接口,通过接口实例化应用工厂,实现解耦
factorymanager *factorymanager:: GetInstance(){
static factorymanager instance;
return &instance;
}
factory *factorymanager::CreatFactory(&id){
auto it=fn_map_find(id);
if(it==fn_map_.end()){
throw std::runtime_error("Unknown Shape ID");
}
return (it->second());//返回值
}
std::map4.根据接收到消息,触发应用工厂函数fn_map_; //内部类,用于辅助子类自动化注册 使用宏进行新类注册 templete<> class Register{ public: Register(uint32_t id){ Factorymanager::GetInstance()->fn_map_.emplace(id,&Register ::create); } inline static Event* create(){ return new T; } }; //宏定义 #define REGISTER_EVENT_VNAME(T) reg_event_##T## #define REGISTER_EVENT(T,id,...) static Register REGISTER_EVENT_VNAME(T)(eventid,##__VA_ARGS__) #endif
int main(){
event *e=EventManager::GetInstance()->CreatEvent(id);//实例化事件
e->Process();
e->featureprocess();
delete e;
}
5.总结
自动注册类的工厂模式,当需要增加新的子类时,原来的代码无需修改,只需在注册类的声明出增加注册的宏定义。
参考文章:https://www.jianshu.com/p/933e2f574234



