设计模式之工厂方法模式

一、工厂方法模式介绍

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

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

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

相关推荐
2401_8906661311 分钟前
(免费送源码)计算机毕业设计原创定制:Java+JSP+HTML+JQUERY+AJAX+MySQL springboot计算机类专业考研学习网站管理系统
java·python·django·flask·node.js·html·课程设计
糖拌西红柿多放醋16 分钟前
关于SpringBoot集成Kafka
java·spring boot·kafka
YAy1733 分钟前
Shiro550漏洞分析
java·开发语言·学习·网络安全·安全威胁分析
XWM_Web42 分钟前
JavaApi---第二节
java·开发语言·python·学习
Rocky4011 小时前
应用分层(MVC和三层体系架构)
java
daiyang123...1 小时前
JavaEE 【知识改变命运】02 多线程(1)
java·开发语言·后端·java-ee·idea
adwish1 小时前
java基础知识(常用类)
java·开发语言
盼海2 小时前
排序算法(六)--堆排序
java·算法·排序算法
凭君语未可2 小时前
豆包MarsCode算法题:三数之和问题
java·算法
kirito学长-Java2 小时前
springboot/ssm考试系统Java学生在线考试系统web学习论坛源码
java·spring boot·学习