狂神设计模式笔记-工厂模式
文章目录
- 一、简单工厂模式
- 二、工厂方法模型
核心本质:
实例化对象不使用new,用工厂方法代替
将选择实现类,创建对象统一管理和控制。从而将调用者跟我们的实现类解耦
详细分类:
- 简单工厂模式:用来生产同一等级结构中的任意产品(对于增加新的产品,需要修改已有代码)
- 工厂方法模式:用来生产同一等级结构中的固定产品(支持增加任意产品)
- 抽象工厂模式:围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。
满足OOP七大原则中的三个:
- 开闭原则: 一个软件的实体应当对扩展开放,对修改关闭
- 依赖倒转原则: 要针对接口编程,不要针对实现编程
- 迪米特法则: 只与你直接的朋友通信,而避免和陌生人通信
一、简单工厂模式
举一个客户买车的示例(客户自己不去new车(不用关心车怎么实现的细节),而是通过工厂生产车,减少硬编码):
public interface Car{void name();
}
public class Bench implements Car{@Overridepublic void name() {System.out.println("奔驰车");}
}
public class Baoma implements Car{@Overridepublic void name() {System.out.println("宝马车");}
}
//静态(简单)工厂模式
public class CarFactory {public static Car getCar(String car){if(car.equals("奔驰"))return new Bench();else if(car.equals("宝马"))return new Baoma();elsereturn null;}
}
public class Customer {public static void main(String[] args) {Car car = CarFactory.getCar("奔驰");car.name();}
}
注:大多数情况下用的都是简单工厂模式,这种模式仍有不足,如果再增加一辆车,则会修改CarFactory.java
的getCar方法,违反了开闭原则,我们应该扩展,不应该修改。
二、工厂方法模型
我们新建一个CarFactory的接口,然后为每种Car都建一个Factory类。这样就可以使得每次新加入一种车时,只为这种车建立一个对应的工厂就行,不会影响到原来的代码。
public interface CarFactory {Car getCar();
}
public class BenchFactory implements CarFactory{@Overridepublic Car getCar() {return new Bench();}
}
public class Customer {public static void main(String[] args) {Car car = new BenchFactory().getCar();car.name();}
}
优点:下次加入一种大众车,只需要新建一个 DazhongFactory 就行,不会影响到别的工厂。
缺点:代码量加大,管理复杂,结构复杂,实际业务一般使用简单工厂模式
总结:不一定要符合设计原则,要根据实际情况加以分析取舍
,只需要新建一个 DazhongFactory 就行,不会影响到别的工厂。
缺点:代码量加大,管理复杂,结构复杂,实际业务一般使用简单工厂模式
总结:不一定要符合设计原则,要根据实际情况加以分析取舍
狂神设计模式笔记-工厂模式相关推荐
- HeadFirst设计模式笔记——工厂模式
在客户端程序中过多的使用new去实例化就会造成耦合过强的问题.使用工厂模式可以有效地将这些实例化工作抽离到客户程序之外,使程序更多的依赖抽象类而不是具体的类,从而解耦. 简单工厂 简单工厂将同源类的实 ...
- 设计模式 - 学习笔记 - 工厂模式Factory Pattern
设计模式 - 学习笔记 - 工厂模式Factory Pattern 1. 简单工厂 1.1 应用场景 1.2 UML 1.3 优劣分析 好处 缺点 1.4 代码示例 抽象产品 AbstractProd ...
- 【JAVA进阶系列】JAVA 设计模式 -- 抽象工厂模式(Abstract Factory)
[JAVA进阶系列]JAVA 设计模式 -- 抽象工厂模式(Abstract Factory) [1.1]抽象工厂模式简介 抽象工厂者模式的类结构图 AbstractProduct(抽象产品),Abs ...
- Java设计模式(工厂模式>抽象工厂模式和原型模式)
Java设计模式Ⅱ 1.工厂模式 1.1 简单工厂模式 1.2 工厂方法模式 2.抽象工厂模式 3.总结 4.原型模式 4.1 原型模式 4.2 浅拷贝 4.3 深拷贝 5.建造者模式 1.工厂模式 ...
- JavaScript设计模式--简单工厂模式例子---XHR工厂
JavaScript设计模式--简单工厂模式例子---XHR工厂 第一步,Ajax操作接口(目的是起一个接口检测作用) (1)引入接口文件 //定义一个静态方法来实现接口与实现类的直接检验 //静态方 ...
- 三角形圆形创建与擦除java_设计模式---------------简单工厂模式
设计模式---------------简单工厂模式 一.题目(Question) 使用简单工厂模式设计一个可以创建不同几何形状(如圆形.方形和三角形等)的绘图工具,每个几何图形都要有绘制draw()和 ...
- 策略模式和工厂模式的区别_设计模式之工厂模式-工厂方法模式
设计模式之工厂模式-工厂方法模式 大家好,欢迎来到污污弹公司,今天司小司又接到了一个新活-披萨项目. 来源:凯哥Java(kaigejava) 需求: 披萨项目: 要方便披萨品种的扩展.要便于维护.要 ...
- Java 设计模式之工厂模式(二)
原文地址:Java 设计模式之工厂模式(二) 博客地址:http://www.extlight.com 一.背景 本篇内容是 Java 设计模式创建型模式的第二篇.上一篇主题为 <Java 设计 ...
- 设计模式之工厂模式(三)
上一次我们已经通过代码,简单的认识了工厂方法模式,具体的思路请移步到设计模式之工厂模式(二),进行查看.这次,让我们通过设计模式的思想,来好好认识下工厂方法模式. 创建者和产品 所有工厂模式都用来封装 ...
最新文章
- input[type=file]属性
- 视觉SLAM十四讲学习笔记——第四讲--李群与李代数
- 浅谈机器人产品落地全过程
- DOS调用21H存取中断向量
- Ubuntu18.04挂载exfat格式移动硬盘
- php phpanalysis2.0,使用phpAnalysis打造PHP应用非侵入式性能分析器
- 第十二题:设int x=1,float y=2,则表达式x/y的值是:
- linux cat cd,linux 文件系统命令 cat cd chmod
- 最新java初级高级,python基础进阶,机器学习视频资料
- c#web页面显示弹窗_基于 HTML5 WebGL 的 3D 风机 Web 组态工业互联网应用
- 前端代码:html、css(图文混排)文字环绕 - 案例篇
- python之模块copy_reg(在python3中为copyreg,功能基本不变)
- 思科命令敲错等待解决方案
- 小程序源码:微信智慧外链接致富版微信小程序源码下载,支持多端转换-多玩法安装简单
- Linux下文件夹下子文件全部复制到多个文件夹中
- 天猫欲攻手机市场 中华酷联倒戈 京东或将失势
- Colab运行沐神《动手学深度学习》:ImportError: cannot import name ‘_check_savefig_extra_args‘ from ‘matplotlib.back
- MariaDB数据库的备份和还原
- this与super
- Caffe深度学习框架上手教程
热门文章
- 如何自学python知乎-怎么用最短时间高效的学习Python!知乎大佬给出了这样的答案!...
- python基础教程是什么-Python基础教程(一)
- python编程语言-python编程语言基础知识总结
- python是什么 自学-自学Python买什么书?
- python工资一般多少p-为什么这么多人喜欢Python?Python的就业方向是什么?
- python表白代码-如何用Python代码向心爱的姑娘花式表白?
- python和java哪个好-python和java哪个更强大?
- 高通宣称其语音识别系统准确率高达95%
- 什么是pdi检测_汽车pdi检测是什么?如何知道新车做没做pdi
- 51单片机微波炉c语言程序,基于51单片机的微波炉控制C源程序.doc