标签:instance 使用 定义 客户端 逻辑 模式 根据 操作 bean
一.工厂模式概述
工厂模式,又称静态工厂模式,是用来生产对象的。在Java中,万物皆对象,对象需要创建之后才能使用,如果创建对象的时候直接new该对象,就会对该对象耦合严重,当我们更换对象的时候,所有new对象的地方都得修改一遍,显然违背了软件设计的开闭原则。如果我们使用工厂来生产对象,就只需要和工厂打交道就可以了,彻底和对象解耦,如果需要更换对象,直接在工厂里更换该对象即可,达到了解耦的目的。因此,工厂模式一个显著的优点就是解耦。
它的本质就在于实例化对象,用工厂方法来代替new操作;将选择实现类、创建对象统一管理和控制,从而将调用者跟我们的实现类解耦,实现了创建者和调用者的分离。
二.工厂模式的分类
1.简单工厂模式:用来生产同一等级结构中的任意产品。(对于增加新的产品,需要修改已有代码);虽然某种程度不符合设计原则,但实际使用最多。
2.工厂方法模式:用来生产同一等级结构中的固定产品。(支持增加任意产品);不修改已有类的前提下,通过增加新的工厂类实现扩展。
3.抽象工厂模式:用来生产不同产品族的全部产品。(对于增加新的产品,无能为力;支持增加产品族);不可以增加产品,可以增加产品族。
三.工厂模式的应用
·JDK中Calendar的getInstance方法;
·JDBC中Connection对象的获取;
·Hibernate中SessionFactory创建Session;
·spring中IOC容器创建管理bean对象;
·XML解析时的DocumentBuilderFactory创建解析器对象;
·反射中Class对象的newInstance()
四.工厂方法模式的分析
简单工厂模式的扩展性不太好,而好的Java代码应该是符合开闭原则的,即对扩展开放,对修改关闭。而在简单工厂模式下,当新增一个产品类时,需要改动工厂类,产品一多,工厂类逻辑就过于复杂。在工厂方法模式中,核心的工厂类提取成为一个抽象工厂类,由对应产品的子类工厂负责创建对应的产品类对象。抽象工厂类只负责定义子类工厂需要实现的接口,不涉及具体产品类实例化的细节。工厂方法模式是简单工厂模式的衍生,解决了许多简单工厂模式的问题。首先完全实现开闭原则,实现了可扩展。其次更复杂的层次结构,可以应用于产品结果复杂的场合。因此,这里选用工厂方法模式来进行实现。
工厂方法模式由四个角色类组成:
·抽象工厂类:定义工厂类的方法,用来创建产品类
·具体工厂类:用于创建对应的产品对象
·抽象产品类:定义产品了公共的属性、方法
·具体产品类:实现对应产品类的属性、方法
它们之间的UML关系图如下所示:
工厂方法模式例子:
上体育课,老师让学生们打球,可以是打篮球,可以是踢足球,可以是垫排球等等,同一个方法会对应多种不同的行为。
下面用工厂方法模式来进行实现:
第一步:定义产品类对象
第二步:定义工厂类
第三步:定义客户端测试
五.工厂方法模式的优缺点
优点:
基类为工厂方法提供缺省实现,子类可以重写新的实现,也可以继承父类的实现。加一层间接性,增加了灵活性,屏蔽产品类。产品类的实现如何变化,调用者都不需要关心,只需关心产品的接口,只要接口保持不变,系统中的上层模块就不会发生变化。 典型的解耦框架。高层模块只需要知道产品的抽象类,其他的实现类都不需要关心。 多态性,客户代码可以做到与特定应用无关,适用于任何实体类。
缺点:
每增加一个产品,就需要增加一个产品工厂的类,增加了额外的开发量
六.总结
各种设计模式既有它各自的优点,也存在一定的缺点,在开发时可以根据需要来选择合适的设计模式。
标签:instance 使用 定义 客户端 逻辑 模式 根据 操作 bean
原文地址:https://www.cnblogs.com/19chenjian/p/12003838.html