OO设计模式-工厂方法模式
最近在看OO设计模式,觉得设计模式还是挺有用的。现在只是对设计模式的诸多特性进行记录,呵呵,这不是我的发明,算是对学习的笔记吧。以后会见GOF23种设计模式逐一进行记录和分析,废话少说,先说工厂方法模式:
1、理解:
将对象的具体创建过程剥离,客户端无需知道对象是怎么创建的,只需要使用对象。封装对象的创建过程,将散落在系统各个角落的判断逻辑给集中起来。
2、类图:
3、设计对象:
抽象产品: 负责定义具体产品的功能集
具体产品: 负责实现抽象产品的约定
创建者: 负责依据不同的规则创建具体的产品
客户端:调用创建者创建具体产品
4、变体:
创建者和具体产品合并,创建对象的方法变成静态方法,具体产品的构造方法为私有方法,便演变成单例模式
5、优点和用途:
符合面向接口编程原则,客户端无需关注具体创建产品的具体类型,只需要通过创建者创建产品,使用就OK了。具体的创建逻辑交由创建者管理。
符合开闭原则,新增一个具体产品,对原先产品的逻辑没有影响,对扩展开发对修改关闭,但要使用新产品的客户端必须修改代码适配
符合将变化的东西集中起来,避免散落在系统的各个角落,新增具体产品,只需要将创建者的创建逻辑修改,而不会波及到具体产品的使用和运行。
6、缺点:
当产品类型过多的时候,便会造成每个抽象产品需要一个创建者,造成类爆炸。为了避免这种现象发生,可以将创建者和抽象产品合并,在多层次的产品结构中,可以使用抽象工厂方法模式来解决这个问题(下一节会讲到)。
7、应用:
JDK 中很多地方用到。如格式日期的SimpleDataFormat、如字节码加载器、很多项目的工具类。