栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

c++ 工厂模式编程实现

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

c++ 工厂模式编程实现

何为工厂模式


这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。

缺点:一旦新增类,需要在工厂类中添加生成新类的代码。封装性不好。

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::map 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
4.根据接收到消息,触发应用工厂函数
int main(){


event *e=EventManager::GetInstance()->CreatEvent(id);//实例化事件
e->Process();
e->featureprocess();
delete e;
}
5.总结

自动注册类的工厂模式,当需要增加新的子类时,原来的代码无需修改,只需在注册类的声明出增加注册的宏定义。

参考文章:https://www.jianshu.com/p/933e2f574234

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/457282.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号