设计模式之工厂方法模式

一、工厂方法模式介绍

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

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

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

相关推荐
万亿少女的梦16813 分钟前
基于Spring Boot、Java与MySQL的网络订餐系统设计与实现
java·spring boot·mysql·系统设计·网络订餐
触底反弹16 分钟前
🤯 面试被问 AI Workflow 和 Agent 有啥区别?3 张图 + 2 段代码讲清楚!
人工智能·设计模式·面试
咩咩啃树皮9 小时前
第40篇:Vue3组件化开发精讲——组件拆分、复用、父子通信、工程化架构
java·前端·架构
鱟鲥鳚9 小时前
Spring Boot 集成 LangChain4j:从模型调用到 Tool Calling(Demo版)
java·spring boot
大模型码小白11 小时前
【Python零基础教程】继承、多态与魔法函数:面向对象编程三大核心特性详解
java·大数据·开发语言·人工智能·python·ai编程
腾渊信息科技公司11 小时前
Spring Boot对接MES实战:视觉检测数据自动同步方案
java·人工智能·spring boot·后端·计算机视觉·ai·软件需求
爱笑的源码基地12 小时前
高并发 Redis 缓存门诊HIS系统源码,含财务统计药房进销存
java·程序·门诊系统·诊所系统·云诊所源码
wuqingshun31415912 小时前
TCP超时重传机制是为了解决什么问题?
java
莫逸风15 小时前
【AgentScope 2.0】 0. 学习指南
java·llm·agent·agentscope
z1234567898615 小时前
2026最新两款AI编程工具深度对比实测
java·数据库·ai编程