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

建造者模式代码

相关推荐
Yu_Lijing35 分钟前
基于C++的《Head First设计模式》笔记——蝇量模式
c++·笔记·设计模式
敲代码的约德尔人17 小时前
JavaScript 设计模式完全指南
javascript·设计模式
han_21 小时前
JavaScript设计模式(二):策略模式实现与应用
前端·javascript·设计模式
庞轩px2 天前
HotSpot详解——符号引用、句柄池、直接指针的终极解密
java·jvm·设计模式·内存·虚拟机·引用·klass
Yu_Lijing2 天前
基于C++的《Head First设计模式》笔记——责任链模式
c++·笔记·设计模式·责任链模式
青木川崎2 天前
设计模式之面试题
java·开发语言·设计模式
Yu_Lijing3 天前
基于C++的《Head First设计模式》笔记——生成器模式
c++·笔记·设计模式
sg_knight3 天前
设计模式实战:策略模式(Strategy)
java·开发语言·python·设计模式·重构·架构·策略模式
吐个泡泡v3 天前
Python 开发“设计模式”指南
python·设计模式