简单工厂模式

  • 简单工厂模式概述
  • 简单工厂模式总结

简单工厂模式概述

首先将需要创建的各种不同对象的相关代码封装到不同的类中,这些类称为具体产品类,而将它们公共的代码进行抽象和提取后封装在一个抽象产品类中,每一个具体产品类都是抽象产品类的子类,然后提供一个工厂类用于创建各种产品,在工厂类中提供一个创建产品的工厂方法,该方法可以根据所传入的参数不同创建不同的具体产品对象;客户端只需要调用工厂类的工厂方法并传入相应的参数即可得到一个产品对象

例子
需求:图标库的设计

软件公司欲给予C++语言开发一套图表库,该图表库可以为应用系统提供各种不同外观的图表,例如柱状图,饼状图,折线图等;软件公司图表库设计人员希望为应用系统开发人员提供一套灵活易用的图表库,而且可以较为方便地对图表库进行扩展,以便能够在将来增加一些新类型的图表

//抽象产品类
struct Chart
{virtual void display() = 0;
};class HistogramChart : public Chart
{public:HistogramChart(){cout << "创建柱状图" << endl;}void display(){cout << "显示柱状图" << endl;}
};class PieChart : public Chart
{public:PieChart(){cout << "创建饼状图" << endl;}void display(){cout << "显示饼状图" << endl;}
};class LineChart : public Chart
{public:LineChart(){cout << "创建折线图" << endl;}void display(){cout << "显示折线图" << endl;}
};class ChartFactory
{public:static Chart* getChart(const string& type){Chart* chart = NULL;if (type == "histogram"){chart =  new HistogramChart();cout << "初始化设置柱状图" << endl;}else if(type == "pie"){chart = new PieChart();cout << "初始化设置饼状图" << endl;}else if (type == "line"){chart = new LineChart();cout << "初始化设置折线图" << endl;}}
};int main()
{Chart* chart = NULL;chart = ChartFactory::getChart("line");chart->display();return 0;
}


在工厂模式下,即使我们需要添加新的不同图表,也可以简单方便的进行添加

简单工厂模式总结

简单工厂模式提供了专门的工厂类用于创建对象,将对象的创建和对象的使用分离开,它作为一种最简单的工厂模式在软件开发中得到了较为广泛的应用

  • 优点

简单工厂模式的主要优点如下:

  1. 工厂类包含必要的判断逻辑,可以决定在什么时候创建哪一个产品类的实例,客户端可以免除直接创建产品对象的职责,而仅仅“消费”产品,简单工厂模式实现了对象创建和使用的分离
  2. 客户端无须知道所创建的具体产品类的类名,只需要知道具体产品类所对应的参数即可,对于一些复杂的类名,通过简单工厂模式可以在一定程度减少使用者的记忆量
  3. 通过引入配置文件,可以在不修改任何客户端代码的情况下更换和增加新的具体产品类,在一定程度上提高了系统的灵活性
  • 缺点

简单工厂模式的主要缺点如下:

  1. 由于工厂类集中了所有产品的创建逻辑,职责过重,一旦不饿能正常工作,整个系统都要受到影响
  2. 使用简单工厂模式势必会增加系统中类的个数(引入新的工程类),增加了系统的复杂度和理解难度
  3. 系统拓展困难,一旦添加了新的产品就不得不修改工厂逻辑,在产品类型较多时,有可能造成工厂逻辑过于复杂,不利于系统的拓展和维护
  4. 简单工厂模式由于使用了静态工厂方法,造成工厂角色无法形成基于继承的等级结构
  • 使用场景

在以下情况下可以考虑使用简单工厂模式:

  1. 工厂类负责创建的对象比较少,由于创建的对象较少,不会造成工厂方法中的业务逻辑太过复杂
  2. 客户端只知道传入工厂类的参数,对于如何创建对象并不关心

C++ 设计模式 简单工厂模式相关推荐

  1. JavaScript设计模式--简单工厂模式例子---XHR工厂

    JavaScript设计模式--简单工厂模式例子---XHR工厂 第一步,Ajax操作接口(目的是起一个接口检测作用) (1)引入接口文件 //定义一个静态方法来实现接口与实现类的直接检验 //静态方 ...

  2. 三角形圆形创建与擦除java_设计模式---------------简单工厂模式

    设计模式---------------简单工厂模式 一.题目(Question) 使用简单工厂模式设计一个可以创建不同几何形状(如圆形.方形和三角形等)的绘图工具,每个几何图形都要有绘制draw()和 ...

  3. 设计模式—简单工厂模式

    前言 简单工厂模式是一种比较容易理解的设计模式 简单工厂模式介绍 在设计模式中,简单工厂模式可以理解为负责生产对象的一个类,当使用new 关键字创建一个对象时,此时该类就依赖于这个对象,也就是他们间的 ...

  4. 设计模式 - 简单工厂模式

    文章目录 设计模式 - 简单工厂模式 1.意图 2.实例 1.创建颜色接口 - 定义生产的产品是什么 2.创建颜色枚举 - 定义生产哪些类型的产品 3.根据颜色枚举创建产品 - 根据产品清单生产产品 ...

  5. 设计模式--简单工厂模式

    什么是工厂模式 工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. 在工厂模式中,我们在创建对象时不会对 ...

  6. C#设计模式--简单工厂模式

    设计模式: 简单工厂模式(Simple Factory Pattern) 介绍:简单工厂模式不是Gof23种设计模式之一.但它在实际的编程中经常被用到,而且思想也非常简单,下面简单举例说明: 简单工厂 ...

  7. C++设计模式--简单工厂模式

    概述 工厂模式:封装对象的实现.它可能是所有设计模式中最有用的模式之一了.这里要说的是简单工厂模式,又称为静态方法工厂模式,属于创建性模式.其原理就是通过传入的参数来判断应该创建什么对象. UML 类 ...

  8. 设计模式 简单工厂模式

    简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一.简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例.简单工厂 ...

  9. 面向对象编程设计模式--简单工厂模式讲解(历史上最简单明白的例子)

    工作之余,在看资料过程中发现一个极易理解的简单工厂模式的例子,自己亲自试练一番,感觉对这个设计模式不熟悉的朋友, 一看马上就知道是什么回事了. 简单工厂模式根据提供给它的数据,返回几个可能类中的一个类 ...

  10. java工厂模式 uml_深入浅出设计模式-简单工厂模式

    模式定义 简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一.简单工厂模式定义了一个创建对象的类,由这个类来封装实例化 ...

最新文章

  1. 一行代码搞定 Python 逐行内存消耗分析
  2. mysql5.6.27_Centos上安装Mysql5.6.27多实例
  3. 什么是 DMZ 区?
  4. Mocha BSM产品亮点——以Portal为展现中心的监控管理平台
  5. eclipse dorado plugin
  6. ODBC、OLEDB、ADO的区别和联系
  7. 请问学习前端最有效的办法是什么?
  8. 质数分布是否随机关乎安全大事
  9. 自学python能学成吗-大家觉得自学python多久能学会?
  10. PowerDesigner绘制ER图
  11. win7安装注意事项及一些美化设置
  12. java标书_java软件项目投标技术标书【精选】.doc
  13. Java 中获取Exception的详细信息
  14. 新版jadx-gui导入dex会提示Bad checksum
  15. MongoDB在58同城的应用实践
  16. 介绍计算机说明文,介绍电脑的说明文作文300字
  17. 第九/十章 导出生产文件-电路板制作
  18. 喀什地区教师计算机水平考试报名,喀什地区2021年教师资格证面试报名时间-面试报名入口-报考条件-233网校...
  19. java基础48 IO流技术(序列流)
  20. Python之文件 打开与关闭

热门文章

  1. 系统工程新发展——体系
  2. LabVIEW软件、驱动安装及编程方法(理论篇—2)
  3. java语言求101~200之间的质数(素数)
  4. 好看又实用的英文字体
  5. PhotoShop PS 教程 100例
  6. Echarts 模拟飞机飞行动态图
  7. debugger vsm_proteus vsm 仿真
  8. proteus仿真 引脚显示电平变化但不能显示波形
  9. android 应用中 assets 下文件的绝对路径
  10. 【Java面试题】一次完整的Http请求过程(非常详细)