工厂模式
概述
一般情况下,工厂模式分为三种:简单工厂,工厂方法和抽象工厂
不过,在GoF的《设计模式》书中,将简单工厂视为工厂方法的一种特例,因此工厂模式又被分为工厂方法和抽象工厂。
简单工厂模式 (静态工厂方法模式)
概念
简单工厂模式 是 创建型
的一种。
在简单工厂模式中,可以根据实际的参数不同返回不同的实例。同时在简单工厂模式中,会定义一个类负责创建其他类的实例,被创建的实例也通常具有共同的父类。
虽然实现了对象的创建和使用的分离
,但是不够灵活
,工厂类集合了所有产品的创建逻辑,职责过重,同时新增一个产品就需要在原工厂类内部添加一个分支,违反了开闭原则
。并且若是有多个判断条件共同决定创建对象,则后期修改会越来越复杂。
实际应用
JDK中的DataFormate、Calendar类都有使用,通过不同参数来返回我们需要的对象。
工厂方法模式
概念
工厂方法模式中,将简单工厂中的工厂类变成一个抽象接口。负责给出不同工厂应该实现的方法,自身不再负责创建各种产品,而是将具体的创建操作交给实现该接口的子工厂类来做。
通过多态的形式解决了简单工厂模式过多的分支问题。虽然在新增产品时不仅要更新一个产品类还要实现与之对应的子工厂,但是相较于简单工厂模式更符合开闭原则
。
实际应用
JDK中的Collection接口中Iterator的实现。Collection中不同的实现类生产适合于自己的迭代器对象。
抽象工厂模式
概念
工厂方法模式通过引入工厂等级结构,解决了简单工厂模式中工厂类职责太重的问题
,但是由于工厂方法模式中的每个工厂只生产一类产品,可能会导致系统中存在大量的工厂类,势必会增加系统的开销。抽象工厂模式为工厂方法模式的进一步延伸
,将其中一些相关的产品组成一个“产品族”,由同一个工厂来进行统一生产。虽然对于新增一个产品族很方便,而且也符合开闭原则,但是新增一个产品等级结构,会对整个工厂结构进行大改
应用
Spring中的BeanFactory