设计模式之工厂方法模式

一、工厂方法模式介绍

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. 抽象工厂模式强调产品对象之间的兼容性和约束性,工厂方法模式强调对产品对象的封装和隐藏。

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

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

相关推荐
wangchunyu1147 小时前
JAVA CompletableFuture异步编程实战
java·开发语言·python
paopaokaka_luck8 小时前
流浪动物救助与收养系统(DeepSeek AI对话、 ECharts多维分析、救助流程衔接、领养与回访衔接、 捐赠确认与公示、志愿者协作)
java·前端·javascript·人工智能·mysql·echarts·推荐算法
Thomas.Sir8 小时前
第9课:SpringBoot4.x Web开发基础:WebMvc自动配置、静态资源、请求参数接收
java·spring boot
程序 代码狂人8 小时前
切片表与分区表的区别(数据开发面试版)
java·大数据·开发语言·数据仓库·算法
2501_944521599 小时前
Deepmerge 跨端三方库仓颉适配全流程
java·python·eclipse·github
南归北隐10 小时前
Spring AI Alibaba Graph框架实现MCP数据库查询实战
java·后端·spring ai·mcp·spring ai mcp
古法老登瞎折腾10 小时前
大数据智能运维实战(九):让 AI 查日志——找到异常,也保留上下文
java·大数据·运维·人工智能·spring ai·mcp
ai大模型-探索者11 小时前
Function Call与MCP(区别、联系与实战)
java·服务器·网络
略略略咯咯11 小时前
啊啊啊啊啊
java·服务器·数据库
SL_staff11 小时前
运维救火实战:钉钉API变更致薪资计算中断,如何用可视化逻辑引擎5分钟热修复
java·开源·全栈