设计模式-工厂方法模式

一 设计模式-工厂方法模式

     工厂方法模式(Factory Method Pattern)是一种常用的类创建型设计模式,它属于对象的创建型模式,主要用来封装对象的创建过程。在该模式中,一个抽象工厂定义了一个接口用于创建产品对象,但实际的实例化延迟到子类中进行,也就是说,具体的产品是由其对应的工厂来创建的。

角色和职责:

1 抽象工厂(Abstract Factory)

  • 定义一个创建产品接口,创建产品工厂方法。
  • 通常是一个抽象类或接口,带有一个抽象方法,该方法返回一个抽象产品类型。

2 具体工厂(Concrete Factory)

  • 实现抽象工厂中定义的工厂方法,负责生产具体的产品对象。
  • 根据传入的参数或其他条件决定创建哪种具体产品对象。

3 抽象产品(Abstract Product)

  • 描述所有可能被创建的产品的公共接口。
  • 可以是一个抽象类或接口,为各种具体产品定义了共同的方法。

4 具体产品(Concrete Product)

  • 是抽象产品接口的具体实现类。
  • 具体工厂创建并返回的具体对象类型。

优点:

  • 符合开闭原则,增加新的产品时,无需修改已有代码,只需新增一个具体的工厂类和产品类即可。
  • 抽象了对象的创建过程,使得系统具有更好的灵活性和可扩展性。
  • 将对象的创建与使用分离,降低了模块间的耦合度。

缺点:

  • 当需要增加新产品时,必须提供一个与之对应的新工厂,这可能导致类数量增多,增加了系统的复杂性。
  • 如果产品之间的差异较大,可能会导致工厂类变得复杂且难以维护。

应用场景:

  • 当一个类不知道它所必须创建的对象的确切类时。
  • 当一个类希望由它的子类来指定它所创建的对象类时。
  • 当构造过程必须使用客户程序提供的信息时。

代码例子:

// 抽象产品
public abstract class Coffee {
    public abstract void brew();
}

// 具体产品
public class Americano extends Coffee {
    @Override
    public void brew() {
        // 美式咖啡冲泡逻辑
    }
}

public class Latte extends Coffee {
    @Override
    public void brew() {
        // 拿铁咖啡冲泡逻辑
    }
}

// 抽象工厂
public abstract class CoffeeFactory {
    public abstract Coffee makeCoffee();
}

// 具体工厂
public class AmericanoFactory extends CoffeeFactory {
    @Override
    public Coffee makeCoffee() {
        return new Americano();
    }
}

public class LatteFactory extends CoffeeFactory {
    @Override
    public Coffee makeCoffee() {
        return new Latte();
    }
}

在上面的代码中,CoffeeFactory是抽象工厂,AmericanoFactoryLatteFactory是具体工厂,而AmericanoLatte是具体产品。通过不同的工厂可以创建不同类型的咖啡产品。

相关推荐

  1. 设计模式-工厂方法模式

    2024-01-13 23:18:03       62 阅读
  2. 设计模式-工厂方法模式

    2024-01-13 23:18:03       43 阅读
  3. 设计模式工厂方法模式

    2024-01-13 23:18:03       36 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-13 23:18:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-13 23:18:03       100 阅读
  3. 在Django里面运行非项目文件

    2024-01-13 23:18:03       82 阅读
  4. Python语言-面向对象

    2024-01-13 23:18:03       91 阅读

热门阅读

  1. 计算机体系中程序、进程与线程的关系解读

    2024-01-13 23:18:03       65 阅读
  2. 如何建立正确的文献阅读习惯

    2024-01-13 23:18:03       56 阅读
  3. 排序算法-快速排序

    2024-01-13 23:18:03       70 阅读
  4. 基于视觉定位技术选型

    2024-01-13 23:18:03       74 阅读
  5. 知识笔记(七十六)———链式语句中limit用法

    2024-01-13 23:18:03       64 阅读
  6. 头像的渲染及表单的验证

    2024-01-13 23:18:03       55 阅读
  7. Open3D 从点云构建八叉树(13)

    2024-01-13 23:18:03       57 阅读
  8. 【UML】第20篇 UML系列完结篇

    2024-01-13 23:18:03       69 阅读