• 建造者模式


    主要概念

    建造者模式是一种创建型设计模式,旨在通过简化复杂对象的构建过程来创建对象。它允许您按步骤构建对象,同时隐藏了创建细节。该模式通常适用于需要创建具有大量配置选项或参数的对象的情况。

    以下是建造者模式的一般结构和关键参与者:

    1. 产品(Product):要构建的复杂对象。

    2. 建造者接口(Builder Interface):定义了构建产品所需的方法。

    3. 具体建造者(Concrete Builder):实现了建造者接口,负责构建产品的具体部件,并提供了访问产品的方法。

    4. 指导者(Director):负责使用建造者接口来构建产品。指导者知道建造者应如何构建产品。

    5. 客户端(Client):通过指导者构建产品。

    代码实例

    下面是一个简单的Java示例,演示了如何使用建造者模式来构建一辆汽车:

    1. // 产品
    2. class Car {
    3. private String make;
    4. private String model;
    5. private int year;
    6. public Car(String make, String model, int year) {
    7. this.make = make;
    8. this.model = model;
    9. this.year = year;
    10. }
    11. // Getters
    12. public String getMake() { return make; }
    13. public String getModel() { return model; }
    14. public int getYear() { return year; }
    15. }
    16. // 建造者接口
    17. interface CarBuilder {
    18. CarBuilder setMake(String make);
    19. CarBuilder setModel(String model);
    20. CarBuilder setYear(int year);
    21. Car build();
    22. }
    23. // 具体建造者
    24. class CarBuilderImpl implements CarBuilder {
    25. private Car car;
    26. public CarBuilderImpl() {
    27. this.car = new Car("", "", 0);
    28. }
    29. @Override
    30. public CarBuilder setMake(String make) {
    31. car.make = make;
    32. return this;
    33. }
    34. @Override
    35. public CarBuilder setModel(String model) {
    36. car.model = model;
    37. return this;
    38. }
    39. @Override
    40. public CarBuilder setYear(int year) {
    41. car.year = year;
    42. return this;
    43. }
    44. @Override
    45. public Car build() {
    46. return car;
    47. }
    48. }
    49. // 指导者
    50. class CarDirector {
    51. private CarBuilder builder;
    52. public CarDirector(CarBuilder builder) {
    53. this.builder = builder;
    54. }
    55. public Car construct(String make, String model, int year) {
    56. return builder.setMake(make)
    57. .setModel(model)
    58. .setYear(year)
    59. .build();
    60. }
    61. }
    62. // 客户端
    63. public class BuilderPatternExample {
    64. public static void main(String[] args) {
    65. CarBuilder builder = new CarBuilderImpl();
    66. CarDirector director = new CarDirector(builder);
    67. Car car = director.construct("Toyota", "Camry", 2022);
    68. System.out.println("Car: " + car.getMake() + " " + car.getModel() + " " + car.getYear());
    69. }
    70. }

    这个示例展示了一个简单的汽车建造者模式。在这个示例中,CarBuilder负责构建汽车对象的具体部分,而CarDirector负责指导建造者如何构建汽车对象。

    主要适用场景

    建造者模式适用于以下情况:

    1. 对象的构造过程比较复杂,涉及多个步骤或者需要组合多个部件来构建对象。
    2. 对象具有多个配置选项,但客户端并不需要知道所有配置选项的细节,只需提供必要的配置即可。
    3. 需要构建不同表示或配置的对象,但构建过程相同或类似。

    举例来说,以下是一些常见的适用场景:

    1. **构建复杂的产品**:当产品的构建过程比较复杂,包括多个步骤或者需要按顺序执行一系列的操作来构建产品时,建造者模式可以将构建过程模块化,使得代码更易于维护和扩展。

    2. **对象拥有大量配置选项**:当对象具有许多配置选项,但客户端只需提供部分配置信息时,可以使用建造者模式。客户端只需调用建造者的相应方法来设置所需的配置,而不需要了解所有配置选项的细节。

    3. **创建不同表示的对象**:有时候,需要根据不同的需求创建不同表示或配置的对象,但构建过程是相同或类似的。在这种情况下,可以使用相同的建造者接口和构建过程来构建不同的对象。

    总之,建造者模式适用于构建过程比较复杂,需要隐藏构建细节,同时允许客户端根据需要定制对象的情况。

    优缺点比较

    优点:

    • 使用建造者模式可以使客户端不必知道产品内部组成的细节。
    • 具体的建造者类之间是相互独立的,这有利于系统的扩展。
    • 具体的建造者相互独立,因此可以对建造的过程逐步细化,而不会对其他模块产生任何影响。

    缺点:

    • 建造者模式所创建的产品一般具有较多的共同点,其组成部分相似;如果产品之间的差异性很大,则不适合使用建造者模式,因此其使用范围受到一定的限制。
    • 如果产品的内部变化复杂,可能会导致需要定义很多具体建造者类来实现这种变化,导致系统变得很庞大。

     

  • 相关阅读:
    解析带有表头的数据文件
    Python——流程控制
    【BP回归预测】基于matlab文化算法优化BP神经网络数据回归预测【含Matlab源码 2124期】
    RocketMQ并行消费浅析
    谐云产品总监高家祺:企业级Spring Cloud Gateway网关优化实践
    2022.11.1 固体物理
    IDEA插件开发(8)---Listeners
    服务架构(SOA)的汽车软件
    瑞吉外卖(五) 全局异常处理
    huggingface下大模型最好的方案
  • 原文地址:https://blog.csdn.net/hhkdinkd/article/details/136218870