工厂模式(Factory)
2017-02-15 23:52
288 查看
一、工厂模式介绍:
工厂模式实现了创建者和调用者的分离
工厂模式分类:
1.简单工厂模式
2.工厂方法模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到其子类
3.抽象工厂模式:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
面向对象设计的基本原则:
OCP(开闭原则,Open-Closed Principle):
一个软件的实体应当对扩展开放,对修改关闭。也就是说如果你要对一个已存在的系统做扩展的时候尽量要新增加类,而不是在原有的基础上修改。
DIP(依赖倒转原则,Dependence Inversion Principle)
针对接口编程,不要针对实现编程。
LoD(迪米特法则,Law Of Demeter)
只与你直接的朋友通信,而避免和陌生人通信。一个类尽量少的依赖其他类
二、工厂模式代码实现
未使用工厂模式的情况
1、简单工厂模式:虽然能通过工厂来创建对象,但是违反了开闭原则。一旦增加功能需要在原有基础上修改代码。
使用了简单工厂模式后:可以创建一个工厂类,该类中提供一个创建汽车的工厂(方法)
2、工厂方法模式:将工厂类调整为工厂接口,需要什么类型的工厂就使用该类实现该工厂,创建相应的产品。
3、抽象工厂模式:抽象工厂模式用来生产不同产品族的全部产品,对于只增加产品某一部分则不适用。抽象工厂模式是工厂模式的一种升级版本。
在有多个业务品种,业务分类时,抽象工厂能产品不同类别的一个全部产品。例如:生产汽车,抽象工厂模式可以生产高端汽车全部配件来组成一个高端汽车,
低端汽车全部配件来组成要给低端的汽车,但是不能产生一个高端的发动机和一个低端的座椅来组成一个中等的汽车。这样会混乱。
代码实现:
首先使用一个接口来定义一个发动机,使用具体的类来定义发动机的好坏(具体实现)
定义一个汽车总工厂,用来生产各种类型的汽车。所有的汽车都需要依赖此工厂来生产汽车。
然后根据生产的不同产品,类创建具体的实现来生产汽车。例如:专门生产高端的汽车,专门生产低端的汽车。都可以用针对CarFactory具体的实现来创建。
高端汽车制造工厂,所有汽车的生产必须依赖汽车总工厂
低端汽车制造工厂,所有汽车的生产必须依赖汽车总工厂
具体生产汽车的时候就可以根据需要来创建具体的汽车了。
以上就是一个针对产品族的工厂,用来生产一个产品,而不是一个配件。假如以后想生产一个中端汽车产品。就可以增加相应的类,实现汽车总工厂CarFactory
来生产。
三、工厂模式要点
简单工厂模式(静态工厂模式)
虽然某种程度不符合面向对象规则(不符合开闭原则,每次新增内容都需要在原有代码上修改),但是实际使用最多。
工厂方法模式
不修改已有类的前提下,通过增加新类来实现扩展。
抽象工厂模式
不可以增加产品中某一个配件,可以增加一个具体的产品族。
四、应用场景
JDK中的Calendar的getInstance方法
JDBC中Connection对象的获取getConnection
Hibernate中SessionFactory创建Session
spring中的IOC容器创建管理bean对象的时候也是工厂模式
XML解析时的DocumentBuilderFactory创建解析器对象
反射中Class对象的newInstance方法。
Java23种设计模式学习笔记【目录总贴】
参考资料:
大话设计模式(带目录完整版).pdf
HEAD_FIRST设计模式(中文版).pdf
尚学堂_高淇_java300集最全视频教程_【GOF23设计模式】
工厂模式实现了创建者和调用者的分离
工厂模式分类:
1.简单工厂模式
2.工厂方法模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到其子类
3.抽象工厂模式:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
面向对象设计的基本原则:
OCP(开闭原则,Open-Closed Principle):
一个软件的实体应当对扩展开放,对修改关闭。也就是说如果你要对一个已存在的系统做扩展的时候尽量要新增加类,而不是在原有的基础上修改。
DIP(依赖倒转原则,Dependence Inversion Principle)
针对接口编程,不要针对实现编程。
LoD(迪米特法则,Law Of Demeter)
只与你直接的朋友通信,而避免和陌生人通信。一个类尽量少的依赖其他类
二、工厂模式代码实现
未使用工厂模式的情况
使用了简单工厂模式后:可以创建一个工厂类,该类中提供一个创建汽车的工厂(方法)
在有多个业务品种,业务分类时,抽象工厂能产品不同类别的一个全部产品。例如:生产汽车,抽象工厂模式可以生产高端汽车全部配件来组成一个高端汽车,
低端汽车全部配件来组成要给低端的汽车,但是不能产生一个高端的发动机和一个低端的座椅来组成一个中等的汽车。这样会混乱。
代码实现:
首先使用一个接口来定义一个发动机,使用具体的类来定义发动机的好坏(具体实现)
高端汽车制造工厂,所有汽车的生产必须依赖汽车总工厂
来生产。
三、工厂模式要点
简单工厂模式(静态工厂模式)
虽然某种程度不符合面向对象规则(不符合开闭原则,每次新增内容都需要在原有代码上修改),但是实际使用最多。
工厂方法模式
不修改已有类的前提下,通过增加新类来实现扩展。
抽象工厂模式
不可以增加产品中某一个配件,可以增加一个具体的产品族。
四、应用场景
JDK中的Calendar的getInstance方法
JDBC中Connection对象的获取getConnection
Hibernate中SessionFactory创建Session
spring中的IOC容器创建管理bean对象的时候也是工厂模式
XML解析时的DocumentBuilderFactory创建解析器对象
反射中Class对象的newInstance方法。
Java23种设计模式学习笔记【目录总贴】
参考资料:
大话设计模式(带目录完整版).pdf
HEAD_FIRST设计模式(中文版).pdf
尚学堂_高淇_java300集最全视频教程_【GOF23设计模式】
相关文章推荐
- 新书速递 | 考前冲刺100题-再版前言
- hibernate的关联关系hbm.xml配置模板
- 13:Permutation Sequence
- 状态模式(State)
- poj 3009 Curling 2.0(dfs)
- 204. Count Primes
- [BZOJ3784]树上的路径(点分治+dfs序+st表+堆)
- WCSTOMBS 函数不支持中文件的解决方法(设置代码页)
- 模板方法模式(Template Method)
- Uva208 Firetruck【dfs】【习题7-1】
- 第三个1000行
- Javascript学习-简单测试环境
- java9
- 什么是码元?什么是比特?
- 蓄水池算法
- 用word2vec训练文本摘要的词向量模型
- 22. 用户身份切换&用户的特殊 shell与 PAM模块
- Android知识点总结,梳理
- 读书笔记 effective c++ Item 11 在operator=中处理自我赋值
- 策略模式(Strategy)