简单工厂模式

【作用】:将对象的创建与使用分离(单一职责原则)
【实现】:定义一个工厂类,根据不同参数返回不同类的实例,被创建的实例有共同父类

结构图

  • Factory(工厂角色):工厂角色即工厂类,它是简单工厂模式的核心,负责实现创建所有产 品实例的内部逻辑
  • Product (抽象产品角色):它是工厂类所创建的所有对象的父类,封装了各种产品对象的 公有方法.
  • ConcreteProduct(具体产品角色):它是简单工厂模式的创建目标

简化的简单工厂模式

为了简化简单工厂模式,我们可以将抽象产品类和工厂类合并,将静态工厂方法移至抽象产品类中

结构图

优缺点

优点
  1. 工厂类包含必要的判断逻辑,可以决定在什么时候创建哪一个产品类的实例,客户端可以 免除直接创建产品对象的职责
  2. 客户端无须知道所创建的具体产品类的类名,只需要知道具体产品类所对应的参数即可
  3. 通过引入配置文件,可以在不修改任何客户端代码的情况下更换新的具体产品类
缺点
  1. 由于工厂类集中了所有产品的创建逻辑,职责过重,违背了“单一职责原则”
  2. 增加系统中类的个数,增加了系统的复杂 度和理解难度。
  3. 添加新产品就不得不修改工厂逻辑,违背了”开闭原则”

适用场景

  1. 工厂类负责创建的对象比较少
  2. 客户端只知道传入工厂类的参数,对于如何创建对象并不关心

参考链接

简单工厂模式学习总结相关推荐

  1. 设计模式之简单工厂模式学习笔记

    前言 简单工厂模式,又叫做静态工厂方法模式.属于创建型工厂模式,但是不属于23中设计模式.学习简单工厂模式,是为了更好地学习工厂方法模式. 定义 简单工厂模式,即静态工厂方法模式,是由一个工厂对象决定 ...

  2. 简单工厂模式学习笔记

    简单工厂学习笔记 代码demo 简单工厂测试类 package com.zhh.designpattern.simplefactory;// 以生产冰箱为例,假设冰箱可能有海尔的,美的的,海信的,TC ...

  3. 设计模式学习--------3.简单工厂模式学习

    场景: 服务端编写API方法供客户端调用,需要将接口与实现分离,客户端不需要知道具体实现,高度解耦,面向接口的编程. 定义: 提供一个创建对象实例的功能,而无须关心其具体实现,被创建实例的类型可以是接 ...

  4. 一起学习设计模式--02.简单工厂模式

    工厂模式是最常用的一类创建型设计模式.我们所说的工厂模式是指工厂方法模式,它也是使用频率最高的工厂模式. 简单工厂模式是工厂方法模式的小弟,它不属于GoF 23种设计模式,但是在软件开发中应用也颇为频 ...

  5. 【Python学习随笔】依赖倒置原则 + 简单工厂模式

    记录一下Python学习中的点滴,分享一段代码. [问题背景]在不同的系统平台需要执行一段有差异的指令,该如何写出更优雅的代码? [知识点]依赖倒置原则 + 简单工厂模式 [代码分享] #!/usr/ ...

  6. 项目学习——简单工厂模式优化

    项目学习--简单工厂模式优化 一.前言 最近接触了一个项目,在这个项目中有一个EventHandler的概念,用于解决KAFKA不同类型的数据. 为了架构设计,开发成员在这里使用了工厂模式来处理这块请 ...

  7. 设计模式 学习笔记(1)简单工厂模式、策略模式

    1.简单工厂模式 用一个单独的类来做创造实例的过程. public class OperationFactory{ public static Operation createOperate(stri ...

  8. 设计模式学习笔记二:简单工厂模式

    含义: 从设计模式的类型上来说,简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一.简单工厂模式是由一个工厂对象决定创 ...

  9. 设计模式学习-简单工厂模式

    模式概述: 专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类,简单工厂(Simple Factory)模式又称为静态工厂方法(Static Factory Method)模式,属 ...

  10. 设计模式学习-每日一记(1.简单工厂模式)

    简单工厂模式 A.定义: 定义一个用于创建对象的接口. B.定义分析: "定义一个用于创建对象的接口". 这个模式的应用主要是定义一个接口,每个类都会有接口,对于面向对象语言就是定 ...

最新文章

  1. SAP MM初阶之事务代码MIGO界面里的HOLD
  2. 解决js跨域调用WebApi的问题
  3. 如何自学python基础-零基础小白该如何学习Python?
  4. java运行过程_Java执行过程
  5. fem求解二维时谐电磁场问题
  6. 笔记-项目配置管理-配置标识-配置识别与建立基线
  7. html实现拖拽排序,简单的jquery拖拽排序效果实现代码
  8. 架构选型,究竟啥时候选redis?
  9. linux命令 选项,Linux常用命令及选项
  10. 剑指 Offer II 083. 没有重复元素集合的全排列
  11. Java 中equals 与 == 的区别:
  12. 172篇文献:NUS颜水成等发布首篇《深度长尾学习》综述
  13. java百度地图离线LBS_百度地图之离线下载功能
  14. html微博图片上传,如何使上传新浪微博照片更清晰
  15. 三线压力传感器原理_压力传感器接线图及原理介绍
  16. Python123 英文字符的鲁棒输入
  17. python调用pyd_Python import / pyd / dll
  18. 圆满了!最后一次疯狂
  19. android 自定义音量调节,Android——自定义音量调节控件
  20. LTSPICE使用教程:参数变量和参数扫描

热门文章

  1. 深入浅出的etl作业调度工具taskctl
  2. 【Excel实战】按指定字符拆分字符串
  3. Mimics三维建模
  4. Mysql的持久层_持久层(数据层,Dao层) MyBatis框架
  5. 详尽的msf——meterpreter——渗透测试教程
  6. 一行Python代码玩转emoji表情,已经玩坏了都...
  7. 图形推理1000题pdf_2019和平区一模24题解析
  8. 数字图像处理边缘检测算子matlab,使用roberts算子对图像进行边缘检测,并二值化的matlab代码实现...
  9. Selenium +Python项目实践(注册流程)
  10. BabeLua--Lua调试器