分工越细,项目就更容易拓展

工厂模式实现了创建者和调用者分离。
设计模式是一种思想,学习设计模式可以提高你的思考角度。

面向对象设计的基本原则:

OCP(开闭原则,Open-Closed Principle):一个软件的实体应当对扩展开放,对修改关闭。
DIP(依赖倒转原则,Dependence Inversion Principle):要针对接口编程,不要针对实现编程。
LoD(迪米特法则,Law of Demeter):只与你直接的朋友通信,而避免和陌生人通信。类尽量少地以来其他类,实现类与类之间的解耦。利于扩展。

不使用简单工厂的情况


简单工厂模式

package factory;public class CarFactory {public static Car createCar(String type) {Car c = null;if ("奥迪".equals(type)) {c = new Audi();} else if ("奔驰".equals(type)) {c = new Benz();}return c;}
}


方法工厂模式

工厂方法模式要点:

– 为了避免简单工厂模式的缺点,不完全满足OCP。
– 工厂方法模式和简单工厂模式最大的不同在于,简单工厂模式只有一个(对于一个项目
或者一个独立模块而言)工厂类,而工厂方法模式有一组实现了相同接口的工厂类。

实际项目中,还是简单工厂用的比较多

简单工厂模式和工厂方法模式PK:

– 结构复杂度
从这个角度比较,显然简单工厂模式要占优。简单工厂模式只需一个工厂类,而工厂方法模式的工厂类随着产品类个数增加而增加,这无疑会使类的个数越来越多,从而增加了结构的复杂程度。
– 代码复杂度
代码复杂度和结构复杂度是一对矛盾,既然简单工厂模式在结构方面相对简洁,那么它在代码方面肯定是比工厂方法模式复杂的了。简单工厂模式的工厂类随着产品类的增加需要增加很多方法(或代码),而工厂方法模式每个具体工厂类只完成单一任务,代码简洁。
– 客户端编程难度
工厂方法模式虽然在工厂类结构中引入了接口从而满足了OCP,但是在客户端编码中需要对工厂类进行实例化。而简单工厂模式的工厂类是个静态类,在客户端无需实例化,这无疑是个吸引人的优点。
– 管理上的难度
这是个关键的问题。
我们先谈扩展。众所周知,工厂方法模式完全满足OCP,即它有非常良好的扩展性。那是否就说明了简单工厂模式就没有扩展性呢?答案是否定的。简单工厂模式同样具备良好的扩展性——扩展的时候仅需要修改少量的代码(修改工厂类的代码)就可以满足扩展性的要求了。尽管这没有完全满足OCP,但我们不需要太拘泥于设计理论,要知道,sun提供的java官方工具包中也有想到多没有满足OCP的例子啊。
然后我们从维护性的角度分析下。假如某个具体产品类需要进行一定的修改,很可能需要修改对应的工厂类。当同时需要修改多个产品类的时候,对工厂类的修改会变得相当麻烦(对号入座已经是个问题了)。反而简单工厂没有这些麻烦,当多个产品类需要修改是,简单工厂模式仍然仅仅需要修改唯一的工厂类(无论怎样都能改到满足要求吧?大不了把这个类重写)。

• 根据设计理论建议:工厂方法模式。但实际上,我们一般都用简单工厂模式。

抽象工厂模式

– 用来生产不同产品族的全部产品。(对于增加新的产品,无能为力;
支持增加产品族)
– 抽象工厂模式是工厂方法模式的升级版本,在有多个业务品种、业务
分类时,通过抽象工厂模式产生需要的对象是一种非常好的解决方式。


总结

工厂模式要点:
– 简单工厂模式(静态工厂模式)
• 虽然某种程度不符合设计原则,但实际使用最多。
– 工厂方法模式
• 不修改已有类的前提下,通过增加新的工厂类实现扩展。
– 抽象工厂模式
• 不可以增加产品,可以增加产品族!

• 应用场景
– JDK中Calendar的getInstance方法
– JDBC中Connection对象的获取
– Hibernate中SessionFactory创建Session
– spring中IOC容器创建管理bean对象
– XML解析时的DocumentBuilderFactory创建解析器对象
– 反射中Class对象的newInstance()
– servlet:工厂模式+单例模式

【Java设计模式】工厂模式相关推荐

  1. Java设计模式-工厂模式(3)抽象工厂模式

    在Java设计模式-工厂模式(2)工厂方法模式 我们知道了工厂方法模式解决了简单工厂模式中的缺陷,做到了满足开闭原则,但是时代是进步的,进而又产生新的问题,工厂难道只能生产一种东西吗.我们所见到的工厂 ...

  2. Java设计模式-工厂模式(2)工厂方法模式

    在Java设计模式-工厂模式(1)简单工厂模式 中我们介绍了简单工厂模式,提到了简单工厂模式违背了开闭原则,而"工厂方法模式"是对简单工厂模式的进一步抽象化,其好处是可以使系统在不 ...

  3. Java设计模式-工厂模式(1)简单工厂模式

    Java设计模式-工厂模式(1)简单工厂模式 一.前言 1)例子 2)类图关系 3)代码实现 二.简单工厂模式 2.1.概述: 2.2.类图关系: 2.3.代码修改: 2.4.优缺点 2.5.扩展-简 ...

  4. java设计模式工厂模式_Java中的工厂设计模式

    java设计模式工厂模式 Welcome to the Factory Design Pattern in Java tutorial. Factory Pattern is one of the C ...

  5. java设计模式工厂模式_Java中的复合设计模式

    java设计模式工厂模式 Composite pattern is one of the Structural design pattern. Composite design pattern is ...

  6. java设计模式工厂模式_Java中的桥梁设计模式

    java设计模式工厂模式 Today we will look into Bridge Design Pattern in java. When we have interface hierarchi ...

  7. java设计模式工厂模式_Java中的外观设计模式

    java设计模式工厂模式 Facade Design Pattern is one of the Structural design patterns (such as Adapter pattern ...

  8. java 工厂模式的写法_[java设计模式] 工厂模式解析

    什么是工厂模式? 我的总结是: 遵守软件设计中的开闭原则和依赖反转原则, 并且客户端只需通过参数来创造多个对象, 并且在创建过程中,创建对象的过程对客户端是透明的. 这种开发模式叫做工厂模式. 出现原 ...

  9. 10.Java设计模式 工厂模式,单例模式

    Java 之工厂方法和抽象工厂模式 1. 概念 工厂方法:一抽象产品类派生出多个具体产品类:一抽象工厂类派生出多个具体工厂类:每个具体工厂类只能创建一个具体产品类的实例. 即定义一个创建对象的接口(即 ...

  10. 学习:java设计模式—工厂模式

    一.工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的. 工厂模式在<Java与模式>中分为三类: 1)简单工厂模式(Simple Facto ...

最新文章

  1. vuls漏洞扫描工具
  2. 面向.NET开发人员的Dapr——分布式世界
  3. 前端学习(1550):$scope和调试工具
  4. 基于Java封装Groovy工具类
  5. 2018年全国高校教师“Python编程、应用及华为大数据”培训班
  6. openstack nova 源码分析4-nova目录下的driver.py
  7. 博文视点读书节第六日丨产品大咖书单阿里云专家直播预告,更有超值代金券手慢无
  8. lfw分类 python_LFW精确度验证__python读写txt
  9. 学习spf记录引发的问题(一)
  10. 在Linux Mint 19.2 XFCE(x64)中安装Canon LBP2900+打印机驱动程序
  11. 不改一行代码,快速迁移 Laravel 应用上云
  12. matlab plot函数详解
  13. xlsm java 读取_使用POI读/写XLSM
  14. 破解支付宝行为/滑动/投篮验证码,淘宝行为验证码同理
  15. C#合并Excel单元格
  16. 电商后台设计:系统消息
  17. 树莓派3b+,4b新手入门到手开箱第一次使用之十大步骤
  18. Skleran-线性模型-最小角回归(LARS)
  19. 01区块链研究的最新进展理论、建模和工具
  20. Android 飞机大战

热门文章

  1. rockbox主题包安装_DUX主题
  2. tvar julia pca_景德镇品种多样PCA牛卡纸追求品质
  3. mysql 定时同步数据_MySQL数据同步之otter
  4. python中的魔法属性和方法
  5. Linux网络新技术基石 |​eBPF and XDP
  6. MySQL亿级数据量实时同步,小米如何完美hold住
  7. 网络编程套接字(三)
  8. 前端工程师后端转型实录
  9. 视频播放器的极致体验优化
  10. 宋利:许多高手并未参加MSU评测