工厂模式(Factory Pattern)是最常用的一类创建型设计模式,包含简单工厂模式(Simple Factory Pattern)、工厂方法模式(Factory Method Pattern)和抽象工厂模式(Abstract Factory Pattern)。它的设计思想基本流程:首先将需要创建的各种不同对象的相关代码封装到不同的类中(具体产品类),而将公共的代码进行抽象和提取后封装在一个抽象产品类中,每一个具体产品类都是抽象产品类的子类;然后提供一个工厂类用于创建各种产品,在工厂类中提供一个创建产品的工厂方法,该方法可以根据传入的参数不同创建不同的具体产品对象;客户端只需调用工厂类的工厂方法并传入相应的参数即可得到一个产品对象。
抽象工厂模式(Abstract Factory Pattern):提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类。抽象工厂模式又称为Kit模式,是一种对象创建型模式。
工厂方法模式解决了简单工厂模式中工厂类职责太重的问题,但仍然存在以下问题:
1)由于工厂方法模式中的每个工厂只生产一类产品,可能会导致系统中存在大量的工厂类,势必会增加系统的开销;
为了解决以上问题,引入抽象工厂模式(Abstract Factory Pattern)。
为了更好的理解抽象工厂模式(Abstract Factory Pattern),先引入两个概念:
- 产品等级结构:产品等级结构即产品的继承结构,如一个抽象类是轿车,其子类有本田轿车、大众轿车、宝马轿车等,则抽象轿车与具体品牌的轿车之间构成了一个产品等级结构,抽象轿车是父类,而具体品牌的轿车是其子类。
- 产品族:在抽象工厂模式(Abstract Factory Pattern)中,产品族是指由同一个工厂生产的,位于不同产品等级机构中的一组产品,如果本田生产的本田轿车、本田跑车、本田摩托车,本田轿车位于轿车产品等级结构中,本田跑车位于跑车产品等级结构中,本田摩托车位于摩托车产品等级结构中,本田轿车、本田跑车、本田轿车构成了一个产品族。
当系统所提供的工厂生产的具体产品并不是一个简单的对象,而是多个位于不同产品等级结构、属于不同类型的具体产品时就可以使用抽象工厂模式(Abstract Factory Pattern)。抽象工厂模式(Abstract Factory Pattern)是所有形式的工厂模式中最为抽象和最具一般性的一种形式。抽象工厂模式(Abstract Factory Pattern)与工厂方法模式(Factory Method Pattern)最大的区别在于,工厂方法模式(Factory Method Pattern)针对的是一个产品等级结构,而抽象工厂模式(Abstract Factory Pattern)需要面对多个产品等级结构,一个工厂等级结构可以负责多个不同产品等级结构中的产品对象的创建。
抽象产品类:声明了产品所具有的业务方法
具体产品类:定义了具体工厂生产的具体产品对象,实现抽象产品接口中声明的业务方法
抽象工厂类:声明了一组用于创建一族产品的方法,每一个方法对应一种产品
具体工厂类:实现了在抽象工厂中声明的创建产品的方法,生成一组具体产品
config.xml配置文件:
XML工具类:读取config.xml配置文件
客户端: