为什么要使用工厂模式,工厂模式具有哪些优点
看了网上不少关于工厂模式的例子,最近出去面试的时候被问到了才突然想到为什么我们要使用工厂模式,工厂模式能给我们带来哪些好处。
什么是工厂模式
工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。
这是工厂模式的定义,我们自然就不必多说了,主要想写一下使用工厂模式具备了哪些优势。
使用工厂模式的好处
- 解耦
通过工厂模式可以把对象的创建和使用过程分割开来。比如说 Class A 想调用 Class B的方法,那么我们无需关心B是如何创建的,直接去工厂获取就行。 - 减少代码量,易于维护
如果我们直接new一个对象时,如果需要的对象构造方法比较复杂,那么可能需要一连串的代码去创建对象,如果在别的类中又需要创建该对象,那么代码的重复度肯定不小。通过工厂模式的话,我们把对象创建的具体逻辑给隐藏起来了,交给工厂统一管理,这样不仅减少了代码量,以后如果想改代码的话,只需要改一处即可,也方便我们日常的维护。
工厂模式试用的场景
- 对象实例创建的过程比较复杂,并且需要准备很多参数等等,比如说 spring的beanFactory。
- 类具有很多子类,并且这些类的创建过程在业务中容易发生改变
为什么要使用工厂模式,工厂模式具有哪些优点相关推荐
- 如何使用 Spring 实现策略模式+工厂模式
欢迎关注方志朋的博客,回复"666"获面试宝典 一.策略模式 策略模式定义了一组算法,将每个算法都封装起来,并且使它们之间可以互换 1.策略模式主要角色 主要角色如下: 封装角色( ...
- 实践:使用Spring 原生注解来快速实现 策略模式 + 工厂模式
作者:Richard_Yi juejin.im/post/5db0e910518825648f2ef355 前言 这阵子在做项目组重构的工作,工作中的一部分就是就目前代码库中与企业交互的逻辑抽离出来, ...
- 设计模式 — 创建型模式 — 工厂模式
目录 文章目录 目录 工厂模式(Factory Pattern) 应用场景 编码示例 1.简单工厂模式 2.工厂方法模式 3.抽象工厂模式 工厂模式(Factory Pattern) 工厂模式(Fac ...
- 设计模式-创建型模式-工厂模式(工厂三兄弟) TypeScript
设计模式-创建型模式-工厂模式(工厂三兄弟) TypeScript 简单工厂模式 定义一个接口,三个具体类.然后书写如下,通过选择,生产出相应的对象 // 定义Shape接口 interface Sh ...
- this、new、模式工厂、创建新的构造函数
写在前面:今天我将发表函数基础.对象基础.this.new.封装.封装例子 这几篇个人理解文章.最好能一口气看完,并自己写下,相信会对想要理解函数和对象的朋友们会有一些帮助,这些仅仅只是基础,后面还 ...
- 策略模式和工厂模式的区别_设计模式之工厂模式-工厂方法模式
设计模式之工厂模式-工厂方法模式 大家好,欢迎来到污污弹公司,今天司小司又接到了一个新活-披萨项目. 来源:凯哥Java(kaigejava) 需求: 披萨项目: 要方便披萨品种的扩展.要便于维护.要 ...
- 创建型模式---工厂模式
从简单到复杂有简单工厂模式-->工厂方法模式-->抽象工厂模式 简单工厂模式(Simple Factory Pattern) 定义 又称为静态工厂方法(Static Factory Met ...
- 创建型模式 工厂模式
创建型模式 工厂模式 /*** 创建型模式 工厂模式* 工厂方法模式同样属于类的创建型模式又被称为多态工厂模式 .* 符合"开放-封闭"原则 通过添加代码的方式,不是通过修改代码的 ...
- Java设计模式之(工厂模式)--简单工厂模式--工厂方法模式--抽象工厂模式
工厂模式: 工厂模式可以分为三类: 1)简单工厂模式(Simple Factory) 2)工厂方法模式(Factory Method) 3)抽象工厂模式(Abstract Factory) 简单工厂模 ...
- 工厂模式(简单工厂、工厂方法、抽象工厂)
简单工厂模式 从设计模式的类型上来说,简单工厂模式是属于创建型模式,又叫做静态工厂方法(StaticFactory Method)模式,但不属于23种GOF设计模式之一.简单工厂模式是由一个工厂对象决 ...
最新文章
- 2021年泰晤士世界大学学科排名公布!清北均有学科位居世界前10
- c语言指针尚观嵌入式,C语言-指针
- ORA-15260: permission denied on ASM disk group
- python 归纳 (二二)_多进程数据共享和同步_管道Pipe
- mysql公告信息管理系统_JSP班级公告管理系统+mysql 班级公告管理系统 - 下载 - 搜珍网...
- 判断是否离开当前页面
- [译] JavaScript 中的私有变量
- 1.2.1 Milking Cows 挤牛奶
- 【电力负荷预测】基于matlab遗传算法优化BP神经网络电力负荷预测【含Matlab源码 1524期】
- 调查 | 用户无法识别网络钓鱼攻击
- 【正点原子STM32连载】第三章 开发环境搭建 摘自【正点原子】MiniPro STM32H750 开发指南_V1.1
- [Python从零到壹] 三十四.OpenCV入门详解——显示读取修改及保存图像
- 大学计算机应用基础第三版梁洁,《大学计算机应用基础(第3版)/高等学校教材》低价购书_教材教辅考试_孔网...
- Linux的进程优先级NI和PR到底有什么区别
- PRML读书会第九章 Mixture Models and EM(Kmeans,混合高斯模型,Expectation Maximization)...
- 我的macOS常用软件清单
- Spark Skew Join Optimization
- 2023 目标,与君共勉
- 查缺补漏:集和与非平凡属性
- BlackBerry 9850 应用:新浪微博
热门文章
- 【玩机】华为,vivo系统,iqoo通过adb关闭系统升级更新
- 传苹果为iPhone增加Haptic触摸力反馈技术
- MySQL——多表查询(笔记6)
- Win10自带的Xbox Game Bar录屏演示(疫情在家学校直播上课)
- CentOS系统初装后的优化
- java jsp面积怎么算_纯JSP实现计算圆的面积和周长
- 2021-09-29:mentor calibre 2009 xRC文档
- 《关于如何在win10上下载microsoft visual 2010旗舰版》
- Spark-Streaming流式处理学习与快速入门指南
- 原神壁纸大全|那些你所需要的原神壁纸!