设计模式--抽象工厂模式


为了更好地理解抽象工厂模式,我们先引入两个概念:

产品等级结构: 产品等级结构即产品的继承结构。一个抽象类为手机,其子类为华为,小米,一加等。抽象手机与具体品牌构成一个产品等级结构。

产品族:产品族是指由同一个工厂生产的,位于不同产品等级结构中的一组产品。如小米工厂生产的小米手机、小米电视、小米手表。

当一个工厂等级结构可以创建出分属于不同产品等级结构的一个产品族中的所有对象时,抽象工厂模式比工厂方法模式更为简单、更有效率,使用抽象工厂模式可以极大减少系统中类的个数。

基本流程:

  • AbstractFactory(抽象工厂): 它声明了一组用于创建一族产品的方法,每一个方法对应一种产品。
abstract class AbstractFactory {
public abstract AbstractProductA createProductA(); //工厂方法一
public abstract AbstractProductB createProductB(); //工厂方法二
……
}
  • ConcreteFactory(具体工厂): 它实现了在抽象工厂中声明的创建产品的方法,生成一组具体产品,这些产品构成了一个产品族,每一个产品都位于某个产品等级结构中。
class ConcreteFactory1 extends AbstractFactory {
    //工厂方法一
public AbstractProductA createProductA() {
    return new ConcreteProductA1();
}
 
//工厂方法二
public AbstractProductB createProductB() {
    return new ConcreteProductB1();
}
……
}