设计模式 C++工厂方法模式
推荐阅读设计模式 C++简单工厂模式
工厂方法模式是在简单工厂模式的缺点上进行优化的,我们都知道,在简单工厂模式中,要去增加或者减少一个产品的类型,都需要修改工厂中的if-else判断。这样子显然不符合我们代码开发中的开闭原则,拓展起来也是非常麻烦的
工厂方法模式 = 简单工厂模式 + “开闭原则”
定义思想:工厂父类负责定义创建产品对象的公共接口,而工厂子类则负责生成具体的产品对象,这样做的目的就是将产品类的实例化操作延迟到工厂子类中完成,即通过工厂子类来确定究竟应该实例化哪一个具体产品类
优点:
- 不需要记住具体的类名,甚至连具体参数都不需要记住
- 实现了对象创建和使用的分离
- 系统的可扩展性变得更好,符合开闭原则
缺点:
- 系统中的类是成对增加,增加了系统的复杂度和理解度
适用场景:
- 客户端不需要知道具体产品类的名字,只需要知道其所对应的工厂即可
- 不关心类的创建和实现的细节
代码实现:(手机产品)
//抽象手机
class AbstractPhone
{public:virtual void ShowName() = 0;
};//华为
class Huawei : public AbstractPhone
{public:virtual void ShowName(){cout << "Huawei Phone" << endl;}
};//小米
class Xiaomi : public AbstractPhone
{public:virtual void ShowName(){cout << "Xiaomi Phone" << endl;}
};//苹果
class Apple : public AbstractPhone
{public:virtual void ShowName(){cout << "Apple Phone" << endl;}
};//抽象工厂
class AbstractPhoneFactory
{public:virtual AbstractPhone* CreatePhone() = 0;
};//华为工厂
class HuaweiFactory : public AbstractPhoneFactory
{public:virtual AbstractPhone* CreatePhone(){return new Huawei();}
};//小米工厂
class XiaomiFactory : public AbstractPhoneFactory
{public:virtual AbstractPhone* CreatePhone(){return new Xiaomi();}
};//苹果工厂
class AppleFactory : public AbstractPhoneFactory
{public:virtual AbstractPhone* CreatePhone(){return new Apple();}
};
测试:
void test()
{//创建一个工厂AbstractPhoneFactory* factory = nullptr;//创建一个手机AbstractPhone* phone = nullptr;//指定工厂是华为工厂factory = new HuaweiFactory;//通过华为工厂创建一个手机phone = factory->CreatePhone();phone->ShowName();delete phone;delete factory;factory = new XiaomiFactory;phone = factory->CreatePhone();phone->ShowName();delete phone;delete factory;factory = new AppleFactory;phone = factory->CreatePhone();phone->ShowName();delete phone;delete factory;
}
运行结果:
推荐阅读设计模式 C++抽象工厂模式
设计模式 C++工厂方法模式相关推荐
- python类是实例的工厂_Python设计模式之工厂方法模式实例详解
本文实例讲述了Python设计模式之工厂方法模式.分享给大家供大家参考,具体如下: 工厂方法模式(Factory Method Pattern):定义一个用于创建对象的接口,让子类决定实例化哪一个类, ...
- 设计模式复习-工厂方法模式
设计模式复习-工厂方法模式 相对于简单工厂,工厂方法是把算法类的实例化延迟到了调用者那去做,调用者根据自己的需要,自己实例化相关的工厂并且生产相关算法.这么做是因为简单工厂是不满足OCP的,因为如果 ...
- C#设计模式(3)——工厂方法模式
一.引言 在简单工厂模式中讲到简单工厂模式的缺点,有一点是--简单工厂模式系统难以扩展,一旦添加新产品就不得不修改简单工厂方法,这样就会造成简单工厂的实现逻辑过于复杂,然而本专题介绍的工厂方法模式可以 ...
- 设计模式之工厂方法模式(创建型)
一.模式定义 工厂方法模式:又称工厂模式,也叫虚拟构造器模式,属于构建型设计模式,工厂方法模式是在简单工厂模式上进行拓展,生产产品的过程由具体工厂类实现,基类只实现接口,这使得工厂方法模式可以在不修改 ...
- 设计模式之工厂方法模式应用例题
设计模式之工厂方法模式应用例题 题目描述 类结构图及相关说明 程序代码 运行结果 题目描述 现需要设计一个程序来读取多种不同类型的图片格式,针对每一种图片格式都设计一个图片读取器(ImageReade ...
- 设计模式:工厂方法模式(Factory method)
设计模式:工厂方法模式(Factory method) 一.问题 在前一章中通过披萨的实例介绍了简单工厂模式.在披萨实例中,如果我想根据地域的不同生产出不同口味的披萨,如纽约口味披萨,芝加哥口味披萨. ...
- 【设计模式】工厂方法模式(C#)
[设计模式]工厂方法模式 1.概述 针对简单工厂中的缺点,使用工厂方法模式就可以完美的解决,完全遵循开闭原则. 定义一个用于创建对象的接口,让子类决定实例化哪个产品类对象.工厂方法使一个产品类的实例化 ...
- 一文叫你弄懂Java设计模式之工厂方法模式:图解+日志记录器代码实例
文章目录 详解Java设计模式之工厂方法模式 案例引入工厂方法模式 工厂方法模式 定义 案例分析 UML类图分析 代码分析 工厂方法的重载 工厂方法的隐藏 模式优点 模式缺点 模式适用环境 详解Jav ...
- 设计模式之工厂方法模式(Factory Method)摘录
23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式包括:1.FactoryMethod(工厂方法模式):2.Abstract Factory(抽象工厂模式):3.Sin ...
- 021 设计模式之工厂方法模式,抽象工厂模式的区别
简单工厂模式,工厂方法模式和抽象工厂模式的异同 简单工厂模式,工厂方法模式和抽象工厂模式都是属于创建型设计模式,这三种创建型模式都不需要知道具体类.我们掌握一种思想,就是在创建一个对象时,需要把容易发 ...
最新文章
- linux中安装vsftpd出现的问题
- Java面试题—内部类和静态内部类的区别
- beego原生mysql查询_Beego基础学习(五)Golang原生sql操作Mysql数据库增删改查(基于Beego下测试)...
- IDEA 自动生成类注释和方法注释
- eclipse常见小问题
- 大数据的可视化:bigvis包的简单尝试
- cad插件加载bplot成功用不了_Batchplot批量打印命令无效,对照情况进行解决
- 日常学习笔记-RGB配色和颜色转换
- 计算机上网记录怎么清除,win7系统彻底清除上网记录的详细方法
- 双引号后面要加句号吗_引号里应不应该用句号,双引号后的句号在前还是在后?...
- php后缀加swp,当编辑文件出现swp的时候如何处理
- Java迷你共享单车系统(面向对象作业)
- 输入三角形的3条边长(均为正整数),如果不能构成一个三角形,则输出“not a triangle”;如果能够构成一个直角三角形,则输出“yes”;如果不能构成直角三角形,则输出“no”。
- back_inserter的使用
- 线性代数-向量组的线性相关
- Windows下UDP编程
- TuneBoto Amazon Video Downloader for mac(亚马逊视频下载器)
- js下载文件修改文件名 (跨域)
- 教你如何训练和提高自己的情商
- 常用坐标系简介以及转换(附代码)
热门文章
- 机房设备服务器维护细则,机房安全管理方面的管理制度
- azure虚拟服务器,虚拟机系列
- 一维转二维_Excel – 一维表和二维表相互转换,只要一个“=”搞定
- mysql还要mysqldump的备份文件到指定数据库
- php smarty thinkphp,用新版的thinkphp3.2.3和新版的smarty3.1.29
- 上传图片至服务器,写入到数据库Blob字段中,以及从数据库读取Blob信息(iframe父子页面传值)(2)
- npm vue安装教程
- 基于JAVA+SpringMVC+Mybatis+MYSQL的教材管理系统
- bzoj 4006 管道连接 —— 斯坦纳树+状压DP
- Confluence 6 企业环境或者网站托管的 Java 配置策略