设计模式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);
    }
}

建造者模式代码

相关推荐
雨中飘荡的记忆1 小时前
观察者模式:从理论到生产实践
java·设计模式
阿波罗尼亚3 小时前
Head First设计模式(十二) 设计原则 复合模式
设计模式
老朱佩琪!3 小时前
Unity原型模式
开发语言·经验分享·unity·设计模式·原型模式
拾忆,想起3 小时前
设计模式三大分类完全解析:构建高质量软件的基石
xml·微服务·设计模式·性能优化·服务发现
老朱佩琪!3 小时前
Unity装饰器设计模式
unity·设计模式
syt_10133 小时前
设计模式之-策略模式
设计模式·bash·策略模式
老鼠只爱大米4 小时前
Java设计模式之代理模式(Proxy)深度解析
java·设计模式·代理模式·proxy pattern·java设计模式·proxypattern
老朱佩琪!4 小时前
Unity适配器模式
unity·设计模式·游戏引擎·适配器模式
syt_10131 天前
设计模式之-代理模式
设计模式·代理模式
拾忆,想起1 天前
设计模式:软件开发的可复用武功秘籍
开发语言·python·算法·微服务·设计模式·性能优化·服务发现