工厂方法模式(一文理解)

工厂方法模式 (Factory Method Pattern)是一种创建型设计模式,旨在定义一个创建对象的接口,但让子类决定实例化哪一个类

通过将对象的创建逻辑分散到各个具体的工厂类中,而不是集中在一个工厂类中,从而实现更灵活和易于扩展的系统结构

核心思想

  • 创建对象的责任委托给子类,而不是在父类中直接实例化对象。
  • 父类定义一个创建对象的接口,而子类负责实现这个接口,从而决定创建哪种类型的对象。

核心概念

  1. 抽象产品类(Product) :定义创建对象的公共接口,用于定义产品共有的属性和方法。
  2. 具体产品类(Concrete Product) :实现抽象产品类中的接口,代表不同类型的产品。
  3. 抽象工厂类(Factory) :定义创建对象的工厂接口,通常包含一个抽象方法用于创建产品。
  4. 具体工厂类(Concrete Factory) :实现抽象工厂类中的接口,定义创建具体产品的逻辑。

示例

假设我们要创建一个汽车生产系统,需要生产不同类型的汽车,汽车品牌有 BYD、XIAOMI 和 AITO。

抽象产品 : Car 接口定义了汽车的公共方法 getBrand(),用于获取汽车品牌。

interface Car {
  String getBrand();
}

具体产品 : BYDCarXIAMICarAITOCar 类分别实现了 Car 接口,并定义了返回对应品牌的方法。

class BYDCar implements Car {
  @Override
  public String getBrand() {
    return "BYD";
  }
}

class XIAMICar implements Car {
  @Override
  public String getBrand() {
    return "XIAOMI";
  }
}

class AITOCar implements Car {
  @Override
  public String getBrand() {
    return "AITO";
  }
}

抽象工厂: CarFactory 接口定义了一个抽象方法 createCar(),用于创建汽车。 

interface CarFactory {
  Car createCar();
}

具体工厂: BYDFactoryXIAMIFactoryAITOFactory 类分别实现了 CarFactory 接口,并定义了创建对应品牌汽车的逻辑。

class BYDFactory implements CarFactory {
  @Override
  public Car createCar() {
    return new BYDCar();
  }
}

class XIAOMIFactory implements CarFactory {
  @Override
  public Car createCar() {
    return new XIAOMICar();
  }
}

class AITOFactory implements CarFactory {
  @Override
  public Car createCar() {
    return new AITOCar();
  }
}

选择对应的工厂来生成对应的汽车

// 使用工厂方法模式创建汽车
public class Main {
  public static void main(String[] args) {
    // 手动选择具体工厂
    CarFactory factory1 = new XIAOMIFactory(); // 选择创建小米汽车工厂
    CarFactory factory2 = new AITOFactory();//选择选择问界汽车工程

    Car car1 = factory1.createCar();
    System.out.println("品牌: " + car.getBrand());
    Car car2 = factory2.createCar();
    System.out.println("品牌: " + car.getBrand());
    
    
  }
}

优缺点
 

优点:

  • 开放封闭原则: 可以通过添加新的具体工厂类来扩展系统,而无需修改现有代码。
  • 代码可读性: 代码结构清晰,易于理解和维护。
  • 灵活性: 因为实例化过程推迟到子类中,可以根据需要选择不同的具体工厂来创建不同的产品。

缺点:

  • 增加代码复杂度: 需要定义多个工厂类和产品类,可能会增加代码复杂度。

工厂方法模式与开闭原则的关系

简单工厂:简单工厂模式-CSDN博客

开闭原则的核心思想是“对扩展开放,对修改关闭”,即在不修改现有代码的情况下增加新功能

简单工厂模式虽然可以实现创建对象的统一管理,但在引入新产品时需要修改工厂类的代码,这违背了开闭原则。而工厂方法模式则通过定义一个创建对象的接口,并让子类决定实例化哪一个类,从而实现了在不修改原有代码的情况下引入新产品的目标。具体来说,当需要增加一个新产品时,只需要增加一个具体的产品类和与之对应的具体工厂类,而不需要修改现有的代码。

因此,工厂方法模式是对简单工厂模式的进一步抽象化和改进,更加符合开闭原则。

你可能感兴趣的:(设计模式,工厂方法模式,java,开发语言,设计模式,c++,spring,springboot)