设计模式-抽象工厂模式(Abstract Factory Pattern)
概要
记忆关键词:抽象接口
定义:提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类。
分析:如果待创建的产品非常多,我们不需要为每一个产品类配上一个工厂类,而是可以把这些产品进行分组。抽象工厂模式是一种把产品类分组,组内不同产品对象于同一个工厂类不同方法的设计模式。
抽象工厂模式结构图如下:
一、能解决什么问题?
二、涉及的角色
1. 抽象接口
统一的抽象类
2. 具体实现类
实现接口的具体功能实现类
3. 工厂类接口(包含创建不同类型产品的方法)
4. 工厂类子类(按照产品分组)
5. Client
三、优缺点分析
1. 优点
1)便于交换产品系列,由于具体工厂类在一个应用中只需要在初始化的时候出现一次,这就使得改变一个应用的具体工厂变得非常容易,它只需要改变具体工厂即可使用不同的产品配置。
2)它让具体的创建实例过程与客户端分离,客户端是通过它们的抽象接口操纵实例,产品的具体类名也被具体工厂的实现分离,不会出现在客户代码中。
2. 缺点
如果需求来自增加功能,除了需要增加功能类接口和具体功能实现类,还需要改动相关的工厂类,这就非常糟糕了
四、简单工厂模式、工厂方法模式、抽象工厂模式的区别
简单工厂模式:简单工厂模式有唯一的工厂类,工厂类的创建方法根据传入的参数做if-else条件判断,决定最终创建什么样的产品对象。
工厂方法模式:工厂方法模式由多个工厂类实现工厂接口,利用多态来创建不同的产品对象,从而避免了冗长的if-else条件判断。
抽象工厂模式:抽象工厂模式把产品子类进行分组,同组中的不同产品由同一个工厂子类的不同方法负责创建,从而减少了工厂子类的数量。
改进:
用简单工厂来改进抽象工厂,使用反射加配置文件来实现