文章目录

  • 一、简单工厂模式
  • 二、工厂方法模型

核心本质:

  • 实例化对象不使用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 就行,不会影响到别的工厂。

缺点:代码量加大,管理复杂,结构复杂,实际业务一般使用简单工厂模式

总结:不一定要符合设计原则,要根据实际情况加以分析取舍

狂神设计模式笔记-工厂模式相关推荐

  1. HeadFirst设计模式笔记——工厂模式

    在客户端程序中过多的使用new去实例化就会造成耦合过强的问题.使用工厂模式可以有效地将这些实例化工作抽离到客户程序之外,使程序更多的依赖抽象类而不是具体的类,从而解耦. 简单工厂 简单工厂将同源类的实 ...

  2. 设计模式 - 学习笔记 - 工厂模式Factory Pattern

    设计模式 - 学习笔记 - 工厂模式Factory Pattern 1. 简单工厂 1.1 应用场景 1.2 UML 1.3 优劣分析 好处 缺点 1.4 代码示例 抽象产品 AbstractProd ...

  3. 【JAVA进阶系列】JAVA 设计模式 -- 抽象工厂模式(Abstract Factory)

    [JAVA进阶系列]JAVA 设计模式 -- 抽象工厂模式(Abstract Factory) [1.1]抽象工厂模式简介 抽象工厂者模式的类结构图 AbstractProduct(抽象产品),Abs ...

  4. Java设计模式(工厂模式>抽象工厂模式和原型模式)

    Java设计模式Ⅱ 1.工厂模式 1.1 简单工厂模式 1.2 工厂方法模式 2.抽象工厂模式 3.总结 4.原型模式 4.1 原型模式 4.2 浅拷贝 4.3 深拷贝 5.建造者模式 1.工厂模式 ...

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

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

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

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

  7. 策略模式和工厂模式的区别_设计模式之工厂模式-工厂方法模式

    设计模式之工厂模式-工厂方法模式 大家好,欢迎来到污污弹公司,今天司小司又接到了一个新活-披萨项目. 来源:凯哥Java(kaigejava) 需求: 披萨项目: 要方便披萨品种的扩展.要便于维护.要 ...

  8. Java 设计模式之工厂模式(二)

    原文地址:Java 设计模式之工厂模式(二) 博客地址:http://www.extlight.com 一.背景 本篇内容是 Java 设计模式创建型模式的第二篇.上一篇主题为 <Java 设计 ...

  9. 设计模式之工厂模式(三)

    上一次我们已经通过代码,简单的认识了工厂方法模式,具体的思路请移步到设计模式之工厂模式(二),进行查看.这次,让我们通过设计模式的思想,来好好认识下工厂方法模式. 创建者和产品 所有工厂模式都用来封装 ...

最新文章

  1. input[type=file]属性
  2. 视觉SLAM十四讲学习笔记——第四讲--李群与李代数
  3. 浅谈机器人产品落地全过程
  4. DOS调用21H存取中断向量
  5. Ubuntu18.04挂载exfat格式移动硬盘
  6. php phpanalysis2.0,使用phpAnalysis打造PHP应用非侵入式性能分析器
  7. 第十二题:设int x=1,float y=2,则表达式x/y的值是:
  8. linux cat cd,linux 文件系统命令 cat cd chmod
  9. 最新java初级高级,python基础进阶,机器学习视频资料
  10. c#web页面显示弹窗_基于 HTML5 WebGL 的 3D 风机 Web 组态工业互联网应用
  11. 前端代码:html、css(图文混排)文字环绕 - 案例篇
  12. python之模块copy_reg(在python3中为copyreg,功能基本不变)
  13. 思科命令敲错等待解决方案
  14. 小程序源码:微信智慧外链接致富版微信小程序源码下载,支持多端转换-多玩法安装简单
  15. Linux下文件夹下子文件全部复制到多个文件夹中
  16. 天猫欲攻手机市场 中华酷联倒戈 京东或将失势
  17. Colab运行沐神《动手学深度学习》:ImportError: cannot import name ‘_check_savefig_extra_args‘ from ‘matplotlib.back
  18. MariaDB数据库的备份和还原
  19. this与super
  20. Caffe深度学习框架上手教程

热门文章

  1. 如何自学python知乎-怎么用最短时间高效的学习Python!知乎大佬给出了这样的答案!...
  2. python基础教程是什么-Python基础教程(一)
  3. python编程语言-python编程语言基础知识总结
  4. python是什么 自学-自学Python买什么书?
  5. python工资一般多少p-为什么这么多人喜欢Python?Python的就业方向是什么?
  6. python表白代码-如何用Python代码向心爱的姑娘花式表白?
  7. python和java哪个好-python和java哪个更强大?
  8. 高通宣称其语音识别系统准确率高达95%
  9. 什么是pdi检测_汽车pdi检测是什么?如何知道新车做没做pdi
  10. 51单片机微波炉c语言程序,基于51单片机的微波炉控制C源程序.doc