返回

学会设计模式之抽象工厂模式,提升编程功力

闲谈

编程范式再精进,抽象工厂模式增功力

在设计模式中,抽象工厂模式一直是一颗璀璨的明珠。它的出现,让对象创建变得更加灵活,更加方便,更加优雅。

抽象工厂模式简介

抽象工厂模式的本质,就是围绕一个超级工厂类,创建其他工厂类;再围绕工厂类,创建实体类。相较于传统的工厂模式,它多出了一个超级工厂类。

抽象工厂模式的组成

  1. 超级工厂类:负责创建其他工厂类,比如汽车制造业中的整车生产厂。
  2. 工厂类:负责创建实体类,比如汽车制造业中的轿车厂、卡车厂、客车厂。
  3. 实体类:被工厂类创建出来的具体对象,比如汽车制造业中的轿车、卡车、客车。

抽象工厂模式的应用场景

  1. 当系统中有多个产品族,并且这些产品族之间存在一定的关联时,可以使用抽象工厂模式。
  2. 当系统需要创建大量对象,并且对象之间存在一定的关联时,可以使用抽象工厂模式。
  3. 当系统需要在运行时动态创建对象时,可以使用抽象工厂模式。

抽象工厂模式的优点

  1. 降低耦合度:抽象工厂模式将产品族的创建与具体的产品类解耦,使得系统更加灵活,更加易于扩展。
  2. 提高可重用性:抽象工厂模式可以将通用代码抽取到超级工厂类中,从而提高代码的可重用性。
  3. 提高灵活性:抽象工厂模式可以通过动态加载不同的工厂类,来创建不同的产品族,从而提高系统的灵活性。

抽象工厂模式的缺点

  1. 增加复杂度:抽象工厂模式的结构比较复杂,对于小型系统来说,可能会增加不必要的复杂度。
  2. 降低性能:抽象工厂模式的创建过程需要经过多个类,可能会降低系统的性能。

抽象工厂模式的实现

以 Java 为例,我们可以使用以下代码来实现抽象工厂模式:

// 超级工厂类
public interface CarFactory {
    Car createCar();
}

// 工厂类
public class SedanCarFactory implements CarFactory {
    @Override
    public Car createCar() {
        return new SedanCar();
    }
}

public class TruckCarFactory implements CarFactory {
    @Override
    public Car createCar() {
        return new TruckCar();
    }
}

// 实体类
public abstract class Car {
}

public class SedanCar extends Car {
}

public class TruckCar extends Car {
}

// 使用抽象工厂模式
public class Main {
    public static void main(String[] args) {
        CarFactory carFactory = new SedanCarFactory();
        Car car = carFactory.createCar();

        System.out.println(car);
    }
}

结语

抽象工厂模式是一种非常实用的设计模式,它可以帮助我们更灵活、更方便、更优雅地创建对象。如果您想成为一名优秀的软件工程师,那么您一定要掌握抽象工厂模式。