设计模式4-建造者模式

定义

Builder Partern:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。(针对于构建对象的参数众多而提出的解耦合,创造复杂对象)

目的

● 使参数更加可视化和可以明确各个参数的定义

● 定义规范和约束

场景

● 当构建一个类的参数众多避免参数混乱时,可以使用建造者模式

实际使用

java.lang.StringBuilderjava.lang.StringBufferappend() 方法返回自身,类似于建造者的链式调用。

java.util.stream.Stream.Builder

代码

java 复制代码
// 产品类 - 计算机
public class Computer {
    // 必需参数
    private String cpu;
    private String ram;

    // 可选参数
    private String storage;
    private String graphicsCard;
    private boolean bluetoothEnabled;

    // 私有构造函数,只能通过Builder构建
    private Computer(ComputerBuilder builder) {
        this.cpu = builder.cpu;
        this.ram = builder.ram;
        this.storage = builder.storage;
        this.graphicsCard = builder.graphicsCard;
        this.bluetoothEnabled = builder.bluetoothEnabled;
    }

    // 省略 getter 方法...

    // 静态内部类 - 建造者
    public static class ComputerBuilder {
        // 必需参数
        private String cpu;
        private String ram;

        // 可选参数 - 初始化默认值
        private String storage = "500GB HDD";
        private String graphicsCard = "Integrated";
        private boolean bluetoothEnabled = false;

        // 建造者的构造函数,接收必需参数
        public ComputerBuilder(String cpu, String ram) {
            this.cpu = cpu;
            this.ram = ram;
        }

        // 用于设置可选参数的方法,并返回建造者本身以实现链式调用
        public ComputerBuilder setStorage(String storage) {
            this.storage = storage;
            return this;
        }

        public ComputerBuilder setGraphicsCard(String graphicsCard) {
            this.graphicsCard = graphicsCard;
            return this;
        }

        public ComputerBuilder setBluetoothEnabled(boolean bluetoothEnabled) {
            this.bluetoothEnabled = bluetoothEnabled;
            return this;
        }

        // 最终的构建方法,返回构建好的产品
        public Computer build() {
            // 可以在这里进行校验
            if (cpu == null || ram == null) {
                throw new IllegalArgumentException("CPU and RAM are required");
            }
            return new Computer(this);
        }
    }

    @Override
    public String toString() {
        return "Computer [cpu=" + cpu + ", ram=" + ram + ", storage=" + storage + ", graphicsCard=" + graphicsCard
                + ", bluetoothEnabled=" + bluetoothEnabled + "]";
    }
}

class Client {
    public static void main(String[] args) {
        // 使用建造者一步步构建产品,链式调用,清晰易懂
        Computer gamingComputer = new Computer.ComputerBuilder("Intel i9", "32GB")
                .setStorage("1TB NVMe SSD")
                .setGraphicsCard("NVIDIA RTX 4080")
                .setBluetoothEnabled(true)
                .build(); // 最终调用build方法构建对象

        System.out.println(gamingComputer);

        // 构建一个基础配置的电脑,只设置必需参数,使用可选参数的默认值
        Computer officeComputer = new Computer.ComputerBuilder("Intel i5", "16GB")
                .build();

        System.out.println(officeComputer);
    }
}

建造者模式代码

相关推荐
紫荆鱼7 小时前
设计模式-适配器模式(Adapter)
c++·设计模式·适配器模式
政采云技术17 小时前
前端设计模式详解
前端·设计模式
崎岖Qiu18 小时前
【设计模式笔记07】:迪米特法则
java·笔记·设计模式·迪米特法则
杯莫停丶1 天前
设计模式之:模板模式
开发语言·设计模式
lapiii3581 天前
14天极限复习软考day4-法律、设计模式
设计模式
紫荆鱼1 天前
设计模式-迭代器模式(Iterator)
c++·后端·设计模式·迭代器模式
紫荆鱼1 天前
设计模式-状态模式(State)
c++·后端·设计模式·状态模式
紫荆鱼1 天前
设计模式-代理模式(Proxy)
c++·后端·设计模式·代理模式
YA3331 天前
java设计模式七、代理模式
java·设计模式·代理模式
Asort2 天前
JavaScript设计模式(二十一)——策略模式:灵活算法的艺术与实战
前端·javascript·设计模式