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

工厂方法模式 (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博客

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

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

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

  • 21
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值