✅作者简介:大家好,我是 Meteors., 向往着更加简洁高效的代码写法与编程方式,持续分享Java技术内容。
🍎个人主页:Meteors.的博客
💞当前专栏:设计模式
✨特色专栏:知识分享
🥭本文内容:23种设计模式——工厂方法模式(Factory Method Pattern)
📚 ** ps **  :阅读文章如果有问题或者疑惑,欢迎在评论区提问或指出。


目录

一. 背景

二. 定义

三. 结构组成

四.代码示例

1. 工厂类的创建

2. 工厂方法模式的使用

五. 优点

六. 缺点

七. 适用场景

八. 总结


一. 背景

工厂方法模式是一种比较常见并且简单的设计模式。相比较于简单工厂模式​(具体类别的实现放到Factory)相比,它​将对象的创建过程委托给子类工厂,使其符合了开闭原则。如果我们之后要创建几个有共性的对象,我们可以考虑使用工厂方法模式。

二. 定义

工厂方法模式​​是一种创建型设计模式,它在父类中提供了一个创建对象的接口(或抽象方法),但允许子类决定要实例化的具体类型。简单来说,就是将对象的实例化过程推迟到子类中进行。

​核心思想:​

  • 定义一个用于创建对象的接口,让子类决定实例化哪一个类
  • 工厂方法使一个类的实例化延迟到其子类

三. 结构组成

工厂方法模式主要包含以下角色:

  • Product(抽象产品) - 定义产品的接口
  • ConcreteProduct(具体产品) - 实现抽象产品接口的具体产品类
  • Creator(抽象工厂) - 声明工厂方法,返回Product类型对象
  • ConcreteCreator(具体工厂) - 重写工厂方法,返回具体产品实例

四.代码示例

1. 工厂类的创建

// 抽象产品
abstract class Product {
    public abstract void use();
}

// 具体产品A
class ConcreteProductA extends Product {
    @Override
    public void use() {
        System.out.println("Using Product A");
    }
}

// 具体产品B
class ConcreteProductB extends Product {
    @Override
    public void use() {
        System.out.println("Using Product B");
    }
}

// 抽象工厂
abstract class Creator {
    // 工厂方法
    public abstract Product factoryMethod();
    
    // 业务方法
    public void someOperation() {
        Product product = factoryMethod();
        product.use();
    }
}

// 具体工厂A
class ConcreteCreatorA extends Creator {
    @Override
    public Product factoryMethod() {
        return new ConcreteProductA();
    }
}

// 具体工厂B
class ConcreteCreatorB extends Creator {
    @Override
    public Product factoryMethod() {
        return new ConcreteProductB();
    }
}

2. 工厂方法模式的使用

// 使用具体工厂A创建产品
Creator creatorA = new ConcreteCreatorA();
creatorA.someOperation(); // 输出: Using Product A

// 使用具体工厂B创建产品
Creator creatorB = new ConcreteCreatorB();
creatorB.someOperation(); // 输出: Using Product B

五. 优点

  • 符合开闭原则 - 新增产品时无需修改现有代码
  • 符合单一职责原则 - 每个工厂类只负责创建特定产品
  • 良好的封装性 - 客户端不需要知道具体产品的创建细节
  • 良好的扩展性 - 增加新产品只需增加相应的工厂类

六. 缺点

  • 类数量增加 - 每增加一个产品类就需要增加一个对应的工厂类
  • 增加了系统的抽象性和复杂度

七. 适用场景

  • 当一个类不知道它所需要的对象的类时
  • 当一个类希望通过其子类来指定创建对象时
  • 当类将创建对象的职责委托给多个帮助子类中的某一个,并且你希望将哪一个帮助子类是代理者这一信息局部化时

八. 总结

工厂方法模式是面向对象设计中非常重要的创建型模式,它通过将对象的创建过程封装起来,使得系统在不修改具体类的情况下增加新的产品对象。这种模式在实际开发中应用广泛,特别是在需要创建多种相似产品对象的场景中。

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐