C++工厂模式
2021/12/24 14:37:06
本文主要是介绍C++工厂模式,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
1、简述
在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,是通过使用一个共同的接口来指向新创建的对象。
2、何时使用
工厂模式作为一种创建模式,一般在创建复杂对象时,考虑使用;
在创建简单对象时,建议直接new完成一个实例对象的创建。
3、工作流程
需要在工厂类中做判断,从而创造相应的产品,当增加新产品时,需要修改工厂类;
使用简单工厂模式,我们只需要知道具体的产品型号就可以创建一个产品
4、缺点
工厂类集中了所有产品类的创建逻辑,如果产品量较大,会使得工厂类变的非常臃肿
5、实例
/* 关键代码:创建过程在工厂类中完成。 */ #include <iostream> using namespace std; //定义产品类型信息 typedef enum { Tank_Type_56, Tank_Type_96, Tank_Type_Num }Tank_Type; //抽象产品类 class Tank { public: virtual const string& type() = 0; }; //具体的产品类 class Tank56 : public Tank { public: Tank56():Tank(),m_strType("Tank56") { } const string& type() override { cout << m_strType.data() << endl; return m_strType; } private: string m_strType; }; //具体的产品类 class Tank96 : public Tank { public: Tank96():Tank(),m_strType("Tank96") { } const string& type() override { cout << m_strType.data() << endl; return m_strType; } private: string m_strType; }; //工厂类 class TankFactory { public: //根据产品信息创建具体的产品类实例,返回一个抽象产品类 Tank* createTank(Tank_Type type) { switch(type) { case Tank_Type_56: return new Tank56(); case Tank_Type_96: return new Tank96(); default: return nullptr; } } }; int main() { TankFactory* factory = new TankFactory(); Tank* tank56 = factory->createTank(Tank_Type_56); tank56->type(); Tank* tank96 = factory->createTank(Tank_Type_96); tank96->type(); delete tank96; tank96 = nullptr; delete tank56; tank56 = nullptr; delete factory; factory = nullptr; return 0; }
这篇关于C++工厂模式的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23增量更新怎么做?-icode9专业技术文章分享
- 2024-11-23压缩包加密方案有哪些?-icode9专业技术文章分享
- 2024-11-23用shell怎么写一个开机时自动同步远程仓库的代码?-icode9专业技术文章分享
- 2024-11-23webman可以同步自己的仓库吗?-icode9专业技术文章分享
- 2024-11-23在 Webman 中怎么判断是否有某命令进程正在运行?-icode9专业技术文章分享
- 2024-11-23如何重置new Swiper?-icode9专业技术文章分享
- 2024-11-23oss直传有什么好处?-icode9专业技术文章分享
- 2024-11-23如何将oss直传封装成一个组件在其他页面调用时都可以使用?-icode9专业技术文章分享
- 2024-11-23怎么使用laravel 11在代码里获取路由列表?-icode9专业技术文章分享
- 2024-11-22怎么实现ansible playbook 备份代码中命名包含时间戳功能?-icode9专业技术文章分享