设计模式之工厂方法模式

一、工厂方法模式介绍

1、工厂方法模式是一种创建型设计模式,它提供了一种将对象的创建委托给子类的方式,工厂方法模式定义了一个用于创建对象的接口,让子类决定实例化哪个类。这样可以将对象的创建逻辑和使用逻辑解耦,使得系统更加灵活。

2、工厂方法模式的核心思想是将对象的创建和使用解耦,通过将对象的创建交给子类来实现,子类可以根据需要自行选择实例化哪个类。工厂方法模式是一种面向对象的思想,它遵循了开闭原则,即对扩展开放,对修改关闭。

3、工厂方法模式的角色:

  • 抽象产品(Product):定义了产品的接口,是具体产品类的父类。
  • 具体产品(Concrete Product):实现抽象产品接口,定义具体产品的具体属性和行为。
  • 抽象工厂(Creator):定义了创建产品的接口,包含一个创建产品的方法。
  • 具体工厂(Concrete Creator):实现抽象工厂接口,实现创建产品的具体逻辑。

4、工厂方法模式的使用场景:

  • 当一个类不知道它所需要的对象的类时。
  • 当一个类希望由子类来指定所创建的对象时。
  • 当一个类将创建对象的职责委托给多个工厂类中的某一个时。

二、下面是一个简单的工厂方法模式的代码示例:

java 复制代码
// 定义产品接口
interface Product {
    void use();
}

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

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

// 定义工厂接口
interface Factory {
    Product createProduct();
}

// 具体工厂A
class ConcreteFactoryA implements Factory {
    @Override
    public Product createProduct() {
        return new ConcreteProductA();
    }
}

// 具体工厂B
class ConcreteFactoryB implements Factory {
    @Override
    public Product createProduct() {
        return new ConcreteProductB();
    }
}

// 客户端
public class Client {
    public static void main(String[] args) {
        // 创建工厂A
        Factory factoryA = new ConcreteFactoryA();
        // 通过工厂A创建产品A
        Product productA = factoryA.createProduct();
        productA.use();

        // 创建工厂B
        Factory factoryB = new ConcreteFactoryB();
        // 通过工厂B创建产品B
        Product productB = factoryB.createProduct();
        productB.use();
    }
}

代码详解:

1、以上代码中,Product是产品接口,定义了产品的抽象方法use。ConcreteProductA和ConcreteProductB是具体产品类,实现了产品接口。

2、Factory是工厂接口,定义了创建产品的抽象方法createProduct。ConcreteFactoryA和ConcreteFactoryB是具体工厂类,实现了工厂接口,通过工厂方法createProduct创建具体产品。

3、在客户端中,首先创建工厂A,通过工厂A创建产品A,并调用产品A的方法。然后创建工厂B,通过工厂B创建产品B,并调用产品B的方法。这样,客户端与具体产品和工厂的实现解耦,并且可以灵活地替换具体产品和工厂。

三、总结

  • 工厂方法模式是一种将对象的创建和使用解耦的设计模式,它将对象的创建交给子类来实现,从而使得系统更加灵活。工厂方法模式适用于当一个类不知道它所需要的对象的类、希望由子类来指定所创建的对象、或将创建对象的职责委托给多个工厂类中的某一个的情况。

  • 抽象工厂模式(Abstract Factory Pattern)和工厂方法模式(Factory Method Pattern)是两种常见的创建型设计模式,它们有以下不同之处:

  1. 抽象工厂模式关注于一系列相关的产品对象的创建,而工厂方法模式关注于单个产品对象的创建。
  2. 抽象工厂模式通过提供一个抽象工厂类和多个具体工厂类来创建一系列产品对象,每个工厂类负责创建一类产品对象。工厂方法模式通过提供一个抽象工厂类和多个具体工厂类来创建特定的产品对象,每个具体工厂类负责创建一种产品对象。
  3. 抽象工厂模式适用于需要创建一系列相关或相互依赖的产品对象的场景,它能够保证创建的产品对象之间的兼容性。工厂方法模式适用于只需要创建单个产品对象的场景,它可以根据具体的工厂类决定创建的产品对象的类型。
  4. 抽象工厂模式增加新的产品对象需要修改抽象工厂类和所有的具体工厂类,违反了开闭原则。工厂方法模式增加新的产品对象只需要添加新的具体工厂类,符合开闭原则。
  5. 抽象工厂模式强调产品对象之间的兼容性和约束性,工厂方法模式强调对产品对象的封装和隐藏。

综上所述,抽象工厂模式和工厂方法模式在对象创建的方式和适用场景上有所差异。具体选择哪种模式取决于需求和设计目标。

如有不足,欢迎指出,期待和大家共同进步---------------------------------------------------------------------------------------------------

相关推荐
面朝大海,春不暖,花不开3 分钟前
自定义Spring Boot Starter的全面指南
java·spring boot·后端
得过且过的勇者y4 分钟前
Java安全点safepoint
java
夜晚回家39 分钟前
「Java基本语法」代码格式与注释规范
java·开发语言
斯普信云原生组1 小时前
Docker构建自定义的镜像
java·spring cloud·docker
wangjinjin1801 小时前
使用 IntelliJ IDEA 安装通义灵码(TONGYI Lingma)插件,进行后端 Java Spring Boot 项目的用户用例生成及常见问题处理
java·spring boot·intellij-idea
wtg44521 小时前
使用 Rest-Assured 和 TestNG 进行购物车功能的 API 自动化测试
java
白宇横流学长1 小时前
基于SpringBoot实现的大创管理系统设计与实现【源码+文档】
java·spring boot·后端
fat house cat_2 小时前
【redis】线程IO模型
java·redis
stein_java3 小时前
springMVC-10验证及国际化
java·spring
weixin_478689763 小时前
C++ 对 C 的兼容性
java·c语言·c++