本文介绍: 建造者模式(Builder Pattern)是一种创建设计模式,它用于构建复杂对象的表示。这种模式将一个复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。建造者模式通常用于解决复杂对象的逐步构建问题。分离复杂对象的构造和表示允许客户端不必了解内部组成的细节,就可以构造复杂的对象。通常用于创建具有多个部分的对象,特别是当这些部分需要通过多个步骤进行构建时。提供控制复杂性的方法
定义

建造者模式(Builder Pattern)是一种创建设计模式,它用于构建复杂对象的表示。这种模式将一个复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。建造者模式通常用于解决复杂对象的逐步构建问题。

建造者模式的关键特点包括:

  1. 分离复杂对象的构造和表示
  2. 提供控制复杂性的方法
    • 通过一个指导者(Director)和多个不同的建造者(Builder)实现,指导者负责按照特定步骤构建产品,而建造者提供这些步骤的具体实现。
  3. 流畅的接口风格

建造者模式通常涉及以下几个角色:

这种模式在需要生成各种复杂对象时非常有用,特别是当这些对象的创建过程需要多个步骤时。通过独立控制过程和复杂对象的各个部分的构造,建造者模式提供了一种更灵活和可控的方式来创建复杂对象。

解决的问题:
  • 处理复杂对象的构造
  • 分离对象的构造和表示
    • 建造者模式提供了一种方法,将一个对象的构造过程与其表示分离开来,这样同样的构建过程可以创建不同的表示。
  • 提高构造对象的可读性和易用性
  • 控制对象的构造过程
    • 建造者模式允许精细控制对象的构造过程。在构建过程中,可以更改产品的类型内容
  • 可选参数的灵活处理
  • 不变性的保证
    • 当对象一旦创建后就不应该改变其状态时,建造者模式可以在对象完全构建好后一次性地返回,从而保证对象的不变性。
使用场景
  • 复杂对象的构建
  • 构造参数多且复杂
    • 当对象的构造过程涉及多个参数时,特别是当有些参数是可选的,建造者模式提供了一种更清晰和安全方式来构建对象。
  • 不同表示的对象
    • 当需要创建多个不同表示的相同类型对象时,建造者模式允许使用相同的构建过程创建不同的表示。
  • 需要封装构建过程
    • 当构建过程需要被封装起来,以便提供不同的表示,同时保持客户端与创建过程的解耦。
  • 构建过程的步骤
    • 当对象的创建需要多个步骤,且这些步骤需要按特定顺序执行时。建造者模式使得执行顺序的控制更加灵活。
  • 不可变对象的创建
    • 对于需要创建不可变对象的场景,建造者模式可以先逐步构建对象的状态然后一次性地返回最终对象,确保其不可变性。
示例代码
// 产品类 - 计算机
public class Computer {
    private String CPU;
    private String memory;
    private String storage;
    private String screen;
    private String operatingSystem;

    private Computer(Builder builder) {
        this.CPU = builder.CPU;
        this.memory = builder.memory;
        this.storage = builder.storage;
        this.screen = builder.screen;
        this.operatingSystem = builder.operatingSystem;
    }

    // getter方法

    // 静态内部Builder类
    public static class Builder {
        private String CPU;
        private String memory;
        private String storage;
        private String screen;
        private String operatingSystem;

        public Builder CPU(String CPU) {
            this.CPU = CPU;
            return this;
        }

        public Builder memory(String memory) {
            this.memory = memory;
            return this;
        }

        public Builder storage(String storage) {
            this.storage = storage;
            return this;
        }

        public Builder screen(String screen) {
            this.screen = screen;
            return this;
        }

        public Builder operatingSystem(String operatingSystem) {
            this.operatingSystem = operatingSystem;
            return this;
        }

        public Computer build() {
            return new Computer(this);
        }
    }
}

// 使用建造者模式构建对象
public class BuilderPatternDemo {
    public static void main(String[] args) {
        Computer computer = new Computer.Builder()
                .CPU("Intel Core i7")
                .memory("16GB RAM")
                .storage("512GB SSD")
                .screen("15 inch 4K")
                .operatingSystem("Windows 10")
                .build();

        // 使用computer对象
    }
}
主要符合的设计原则
  1. 单一职责原则(Single Responsibility Principle)
    • 建造者模式通过将复杂对象的构造过程从其表示中分离出来,使得构造过程和表示方法有单一的职责。构造逻辑在建造者中实现,而对象的表示则在产品类中
  2. 开闭原则(Open-Closed Principle)
  3. 里氏替换原则(Liskov Substitution Principle)
  4. 接口隔离原则(Interface Segregation Principle)
    • 建造者模式通常使用接口来定义建造者的方法,这些接口仅暴露必要的方法,从而遵守接口隔离原则
  5. 依赖倒转原则(Dependency Inversion Principle)
    • 在建造者模式中,指导者类(Director)依赖于建造者接口(Builder),而不是具体的建造者实现类。这样做降低了指导者和具体建造者之间的耦合,符合依赖倒转原则。

综上所述,建造者模式通过上述原则的应用提高代码模块化和灵活性,降低了各个类之间的耦合。

在JDK中的应用
在Spring中的应用

在这些例子中,建造者模式允许通过一个简洁且易读的接口逐步构建复杂对象。它使得代码更加清晰,并且可以灵活地构建对象,而不必担心对象的构建过程中的细节。这种模式在需要构建配置复杂的对象时特别有用,如在配置安全性、创建REST客户端或构建复杂的URI时。


原文地址:https://blog.csdn.net/haoxin963/article/details/134571083

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。

如若转载,请注明出处:http://www.7code.cn/show_6791.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注