抽象工厂模式的目的
创建对像,在工厂方法模式中,一个工厂只生产一种对象,当产品对象过多时,会产生比较多的工厂类.而且实际生产中,一个工厂也不仅仅生产一种产品,而是生产一类产品,比如一个家电厂,可能会生产电视,洗衣机,电冰箱等产品.在抽象工厂模式中,一个工厂可以生产多种产品对象.
抽象工厂方法概述
负责对象创建,一个工厂可以生产多个对象,提供一个创建一系列相关或相互依赖的接口,无需指定具体接口.
要点
- 产品等级结构,产品的继承结构.比如汽车,汽车是一个抽象类,.而宝马,奔驰,兰博基尼则是具体的汽车品牌.抽象汽车和具体的汽车品牌构成了一个产品等级结构.抽象汽车是父类,具体汽车品牌是子类.
- 产品族,同一个工厂生产的不同产品.比如IPhone,IPad,Mac 是苹果的不同产品,它们是是一个产品族.
- 工厂生产多个不同的具体产品,可以一个产品族的所有对象.
- AbstractFactory 抽象工厂.声明创建产品族的方法,每一个方法对应一种产品.
- ConcreteFactory 具体工厂,实现抽象工厂中创建产品的方法,生产具体产品,这些产品构成一个产品族.
- AbstractProduct 抽象产品 ,为产品声明接口,定义产品所有具有的方法.
- Product 具体产品.工厂生产的具体产品,实现产品中声明的方法.
实现
- 抽象工厂,声明创建产品族的方法,可以是接口,抽象类以及具体类.
public interface AbstractFactory{
AbstractProductA createProductA();//工厂方法A
AbstractProductB createProductB();//工厂方法B
}
- 具体工厂,每个具体的工厂方法生产具体的对象,一组具体工厂方法生产一个产品族.
public class Factory1 implements AbstractFactory{
public AbstractProductA createProductA(){
return new ProductA1();
}
public AbstractProductB createProductB(){
return new ProductB1();
}
}
抽象工厂模式的使用场景
- 一个系统中,产品类实例的创建,组合和表达等不影响系统,用户不关心产品的创建过程.
- 系统中有多个产品族,但是每次只使用其中某个一个产品族.
- 属于同一个产品族的产品在一起使用
- 系统提供产品类的库,所有的产品有相同的接口,产品等级结构稳定,设计内完成后,不会改变产品等级结构.