概念:
实例化对象,用工厂方法代替new操作;
包括工厂方法模式和抽象工厂模式;
抽象工厂模式是工厂方法模式的扩展。
意图:
定义一个接口来创建对象,但是让子类来决定哪些类需要被实例化;
工厂方法把实例化的工作推迟到子类中去实现。
应用场景:
有一组类似的对象需要创建;
扩展性
常见应用:
- JDBC:
- spring beanfactory:作为spring基础的IoC容器,是spring的一个bean工厂。
- 解析xml
工厂模式用来创建一个产品的等级结构,而抽象工厂模式用来创建多个产品的等级结构;
工厂模式只有一个抽象产品类,而抽象工厂模式有多个抽象产品类。
工厂方法模式和抽象工厂模式区别
工厂模式在一些设计模式的书中分为简单工厂模式,工厂方法模式和抽象工厂模式三类。
也有把工厂方法模式划分到抽象工厂模式的,认为工厂方法是抽象工厂模式的特例的一种,就是只有一个要实现的产品接口。
简单工厂:工厂类中,根据条件决定一个接口由哪个具体产品类来实现。
工厂方法:创建多个工厂类。各个工厂类中,都对应一个获得接口A实例的方法。用户决定使用哪个工厂。
抽象工厂:对工厂方法进行扩展。各个工厂类中,再增加一个获得接口B实例的方法。
提一下,多个工厂类都继承自同一个接口。
个人觉得这个区别在于产品,如果产品单一,最合适用工厂模式,但是如果有多个业务品种、业务分类时,通过抽象工厂模式产生需要的对象是一种非常好的解决方式。再通俗深化理解下:工厂模式针对的是一个产品等级结构 ,抽象工厂模式针对的是面向多个产品等级结构的。
再来看看工厂方法模式与抽象工厂模式对比:
工厂方法模式 抽象工厂模式
针对的是一个产品等级结构 针对的是面向多个产品等级结构
一个抽象产品类 多个抽象产品类
可以派生出多个具体产品类 每个抽象产品类可以派生出多个具体产品类
一个抽象工厂类,可以派生出多个具体工厂类 一个抽象工厂类,可以派生出多个具体工厂类
每个具体工厂类只能创建一个具体产品类的实例 每个具体工厂类可以创建多个具体产品类的实例