模式简介
在三种工厂模式中,简单工厂模式是最基础的一个。该模式的核心思想是把创建对象过程和对象本身业务处理分离。假设需要创建多个对象,每个对象的创建模式比较复杂,那么我们把这些过程放在逻辑代码中,会使得逻辑代码非常混乱;而且每当有新的产品出现,就需要修改逻辑代码,不符合“开闭原则”。

但是,该模式使得工厂的负担过重,而且每次添加新产品,都需要修改工厂,不是很符合开闭原则,但是比直接在业务逻辑里添加要好很多了。

模式实现
抽象产品类,所有需要创建产品的基类,是个纯虚类
具体产品类,继承抽象产品,是根据需要添加的功能产品
产品工厂类,负责生产具体产品

实际应用场景
Spring中的BeanFactory就是简单工厂模式的体现

UML类图

案例:计算器(加、减、乘、除……)

Operation
import lombok.AllArgsConstructor;
import lombok.Data;/*** @Author l'amour solitaire* @Description Operation运算类* @Date 2020/11/19 上午10:42**/
@Data
@AllArgsConstructor
public class Operation {/*** 参数A**/private Double numA;/*** 参数B**/private Double numB;public Double getResult() {return Double.NaN;}}
AddOperation
/*** @Author l'amour solitaire* @Description 加法运算* @Date 2020/11/19 上午10:48**/
public class AddOperation extends Operation {public AddOperation(Double numA, Double numB) {super(numA, numB);}@Overridepublic Double getResult() {return super.getNumA() + super.getNumB();}}
OperationFactory
/*** @Author l'amour solitaire* @Description 计算器简单运算工厂* @Date 2020/11/19 上午10:41**/
public class OperationFactory {public static final String OPERATION_ADD = "+";public static final String OPERATION_SUB = "-";public static final String OPERATION_MUL = "*";public static final String OPERATION_DIVIDE = "/";public static Operation createOperation(Double numA, Double numB, String operate) {Operation operation = null;switch (operate) {case OPERATION_ADD:operation = new AddOperation(numA, numB);break;case OPERATION_SUB:operation = new SubOperation(numA, numB);break;case OPERATION_MUL:operation = new MultiplyOperation(numA, numB);break;case OPERATION_DIVIDE:operation = new DivideOperation(numA, numB);break;default:break;}return operation;}
}

测试

@SpringBootTest
class DesignApplicationTests {@Testvoid test() {Operation operation = OperationFactory.createOperation(1d, 2d, OperationFactory.OPERATION_ADD);System.out.println(operation.getResult());operation = OperationFactory.createOperation(1d, 2d, OperationFactory.OPERATION_SUB);System.out.println(operation.getResult());operation = OperationFactory.createOperation(1d, 2d, OperationFactory.OPERATION_MUL);System.out.println(operation.getResult());operation = OperationFactory.createOperation(1d, 2d, OperationFactory.OPERATION_DIVIDE);System.out.println(operation.getResult());}}

项目源码关注公众号《JAVA拾贝》回复: 设计模式 即可获取

常用设计模式-简单工厂相关推荐

  1. Spring常用设计模式--简单工厂模式

    本专栏内容参考自:咕泡学院Tom老师的<Spring5核心原理与30个类手写实战>,仅作个人学习记录使用,如有侵权,联系速删. 工厂模式的由来:   在现实生活中我们都知道,原始社会自给自 ...

  2. Android工厂设计模式(简单工厂,工厂方法,抽象工厂,BitmapFactory简单工厂分析,Retrofit抽象工厂分析)

    文章目录 创建型设计模式(简单工厂,工厂方法,抽象工厂) 一.简单工厂模式 引出简单工厂模式 二.工厂方法模式 三.抽象工厂模式 Android源码中用到的工厂模式举例 一.BitmapFactory ...

  3. Unity3D常用设计模式之工厂模式

    Unity3D常用设计模式<工厂模式>   工厂模式(Factory Pattern)是游戏开发中比较常用的设计模式.这种类型的设计模式属于创建型模式,它提供了一种创建对象实例的最佳方式. ...

  4. Android常用设计模式之工厂模式理解

    Android常用设计模式之工厂模式 前言 工厂模式 普通工厂模式 普通工厂模式例子 简单工厂模式总结: 简单工厂模式优缺点: 抽象工厂模式 抽象工厂模式的例子 抽象工厂模式小结 抽象工厂模式优缺点 ...

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

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

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

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

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

    设计模式--简单工厂 工厂角色: package designpattern.creation.simplefactory;/** * 此处的工厂简单写成一个类,因为(简单工厂的工厂)不会有继承或拓展 ...

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

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

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

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

最新文章

  1. Pycharm中使用github
  2. 使用结构体输出员工工资表
  3. java setmethod_Java Operation.setJavaMethod方法代码示例
  4. 看了AI种草莓,我想回去当农民
  5. (转)__declspec(dllimport)和__declspec(dllexport)的区别,以及有关c/c++调用约定
  6. SharePoint初探-sharepoint 安装宝典(2)
  7. C# WPF MVVM开发框架Caliburn.Micro快速搭建③
  8. java打包拆包_[Java] Java 打包成jar包 和 解压jar包
  9. (原创)一步一步学ZedBoard Zynq(一):ZedBoard的第一个工程Helloworld
  10. Android测试之Robotium自动化测试框架
  11. 触动精灵 获取getColor颜色失败
  12. 用Python做一个美丽的每日计划
  13. 使用fsck修复损坏磁盘
  14. python海龟图画龙珠_DeepOps的Python小笔记-天池龙珠计划-Python训练营-Task 02:DAY4
  15. VT系列一:VT简述
  16. 会话验证调度器_用视力调度建立会话式预订机器人
  17. Iphone6S 换屏教程
  18. Shopify好用的开发插件/网站编辑插件
  19. 以计算机网络为话题的英语作文,以网络语言为话题的英语作文
  20. 用 Jester 对测试进行测试

热门文章

  1. 全国青少年软件编程(Scratch)等级考试二级考试真题2021年12月——持续更新.....
  2. CSV文件拆分_行拆分
  3. 魅族什么时候加入鸿蒙系统,魅族接入鸿蒙意味着什么?2021鸿蒙系统产品发布时间确定...
  4. Python与爬虫有什么关系?Python为什么叫爬虫
  5. NFT爆火背后的冷思考
  6. 笔记本黑屏只有鼠标是什么原因
  7. 【有利可图网】PS实战教程34:用Photoshop制作美女马赛克创意效果
  8. PDM软件介绍(二)
  9. es6 中的箭头符号
  10. php中empty与isset的区别,再谈php中empty与isset区别详解