常用设计模式-简单工厂
模式简介
在三种工厂模式中,简单工厂模式是最基础的一个。该模式的核心思想是把创建对象过程和对象本身业务处理分离。假设需要创建多个对象,每个对象的创建模式比较复杂,那么我们把这些过程放在逻辑代码中,会使得逻辑代码非常混乱;而且每当有新的产品出现,就需要修改逻辑代码,不符合“开闭原则”。
但是,该模式使得工厂的负担过重,而且每次添加新产品,都需要修改工厂,不是很符合开闭原则,但是比直接在业务逻辑里添加要好很多了。
模式实现
抽象产品类,所有需要创建产品的基类,是个纯虚类
具体产品类,继承抽象产品,是根据需要添加的功能产品
产品工厂类,负责生产具体产品
实际应用场景
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拾贝》回复: 设计模式 即可获取
常用设计模式-简单工厂相关推荐
- Spring常用设计模式--简单工厂模式
本专栏内容参考自:咕泡学院Tom老师的<Spring5核心原理与30个类手写实战>,仅作个人学习记录使用,如有侵权,联系速删. 工厂模式的由来: 在现实生活中我们都知道,原始社会自给自 ...
- Android工厂设计模式(简单工厂,工厂方法,抽象工厂,BitmapFactory简单工厂分析,Retrofit抽象工厂分析)
文章目录 创建型设计模式(简单工厂,工厂方法,抽象工厂) 一.简单工厂模式 引出简单工厂模式 二.工厂方法模式 三.抽象工厂模式 Android源码中用到的工厂模式举例 一.BitmapFactory ...
- Unity3D常用设计模式之工厂模式
Unity3D常用设计模式<工厂模式> 工厂模式(Factory Pattern)是游戏开发中比较常用的设计模式.这种类型的设计模式属于创建型模式,它提供了一种创建对象实例的最佳方式. ...
- Android常用设计模式之工厂模式理解
Android常用设计模式之工厂模式 前言 工厂模式 普通工厂模式 普通工厂模式例子 简单工厂模式总结: 简单工厂模式优缺点: 抽象工厂模式 抽象工厂模式的例子 抽象工厂模式小结 抽象工厂模式优缺点 ...
- JavaScript设计模式--简单工厂模式例子---XHR工厂
JavaScript设计模式--简单工厂模式例子---XHR工厂 第一步,Ajax操作接口(目的是起一个接口检测作用) (1)引入接口文件 //定义一个静态方法来实现接口与实现类的直接检验 //静态方 ...
- 三角形圆形创建与擦除java_设计模式---------------简单工厂模式
设计模式---------------简单工厂模式 一.题目(Question) 使用简单工厂模式设计一个可以创建不同几何形状(如圆形.方形和三角形等)的绘图工具,每个几何图形都要有绘制draw()和 ...
- 设计模式——简单工厂
设计模式--简单工厂 工厂角色: package designpattern.creation.simplefactory;/** * 此处的工厂简单写成一个类,因为(简单工厂的工厂)不会有继承或拓展 ...
- 设计模式—简单工厂模式
前言 简单工厂模式是一种比较容易理解的设计模式 简单工厂模式介绍 在设计模式中,简单工厂模式可以理解为负责生产对象的一个类,当使用new 关键字创建一个对象时,此时该类就依赖于这个对象,也就是他们间的 ...
- 设计模式 - 简单工厂模式
文章目录 设计模式 - 简单工厂模式 1.意图 2.实例 1.创建颜色接口 - 定义生产的产品是什么 2.创建颜色枚举 - 定义生产哪些类型的产品 3.根据颜色枚举创建产品 - 根据产品清单生产产品 ...
最新文章
- Pycharm中使用github
- 使用结构体输出员工工资表
- java setmethod_Java Operation.setJavaMethod方法代码示例
- 看了AI种草莓,我想回去当农民
- (转)__declspec(dllimport)和__declspec(dllexport)的区别,以及有关c/c++调用约定
- SharePoint初探-sharepoint 安装宝典(2)
- C# WPF MVVM开发框架Caliburn.Micro快速搭建③
- java打包拆包_[Java] Java 打包成jar包 和 解压jar包
- (原创)一步一步学ZedBoard Zynq(一):ZedBoard的第一个工程Helloworld
- Android测试之Robotium自动化测试框架
- 触动精灵 获取getColor颜色失败
- 用Python做一个美丽的每日计划
- 使用fsck修复损坏磁盘
- python海龟图画龙珠_DeepOps的Python小笔记-天池龙珠计划-Python训练营-Task 02:DAY4
- VT系列一:VT简述
- 会话验证调度器_用视力调度建立会话式预订机器人
- Iphone6S 换屏教程
- Shopify好用的开发插件/网站编辑插件
- 以计算机网络为话题的英语作文,以网络语言为话题的英语作文
- 用 Jester 对测试进行测试
热门文章
- 全国青少年软件编程(Scratch)等级考试二级考试真题2021年12月——持续更新.....
- CSV文件拆分_行拆分
- 魅族什么时候加入鸿蒙系统,魅族接入鸿蒙意味着什么?2021鸿蒙系统产品发布时间确定...
- Python与爬虫有什么关系?Python为什么叫爬虫
- NFT爆火背后的冷思考
- 笔记本黑屏只有鼠标是什么原因
- 【有利可图网】PS实战教程34:用Photoshop制作美女马赛克创意效果
- PDM软件介绍(二)
- es6 中的箭头符号
- php中empty与isset的区别,再谈php中empty与isset区别详解