建造者模式(生成器模式)

建造者模式

文章目录

什么是建造者模式

依赖倒转原则 = 抽象不应该依赖细节,细节应该依赖于抽象
对流程进行抽象,流程中具体细节依赖于这个抽象
过程是稳定的,细节是不同的
建造者模式(Builder),将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示

建造者模式解析

  • Director:指挥者,是构建一个使用Builder接口的对象
  • Builder:是为创建一个Product对象的各个部件指定的抽象接口
  • 具体建造者,实现Builder接口,构造和装配各个部件
  • Procuct:具体产品

通过示例去了解建造者模式

建造者模式(Builder Pattern)是一种创建型设计模式,它将一个复杂对象的构建过程与它的表示分离,使得同样的构建过程可以创建不同的表示。以下是一个使用 Java 实现建造者模式的示例,以创建不同配置的电脑(Computer)为例:

1.定义电脑类(Product):

java 复制代码
public class Computer {
    private String cpu;
    private String gpu;
    private int ram;
    private int storage;

    private Computer(ComputerBuilder builder) {
        this.cpu = builder.cpu;
        this.gpu = builder.gpu;
        this.ram = builder.ram;
        this.storage = builder.storage;
    }

    public String getCpu() {
        return cpu;
    }

    public String getGpu() {
        return gpu;
    }

    public int getRam() {
        return ram;
    }

    public int getStorage() {
        return storage;
    }

    @Override
    public String toString() {
        return "Computer{" +
                "cpu='" + cpu + '\'' +
                ", gpu='" + gpu + '\'' +
                ", ram=" + ram +
                ", storage=" + storage +
                '}';
    }
}
java 复制代码
public static class ComputerBuilder {
        private String cpu;
        private String gpu;
        private int ram;
        private int storage;

        public ComputerBuilder withCpu(String cpu) {
            this.cpu = cpu;
            return this;
        }

        public ComputerBuilder withGpu(String gpu) {
            this.gpu = gpu;
            return this;
        }

        public ComputerBuilder withRam(int ram) {
            this.ram = ram;
            return this;
        }

        public ComputerBuilder withStorage(int storage) {
            this.storage = storage;
            return this;
        }

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

2.在客户端代码中,通过建造者类 Computer.ComputerBuilder 创建不同配置的电脑实例:

java 复制代码
public class BuilderPatternDemo {
    public static void main(String[] args) {
        // 创建一台基础配置的电脑
        Computer basicComputer = new Computer.ComputerBuilder()
                .withCpu("Intel i5")
                .withGpu("Nvidia GTX 1650")
                .withRam(8)
                .withStorage(512)
                .build();

        System.out.println("Basic Computer: " + basicComputer);

        // 创建一台高端配置的电脑
        Computer advancedComputer = new Computer.ComputerBuilder()
                .withCpu("Intel i9")
                .withGpu("Nvidia RTX 3080")
                .withRam(32)
                .withStorage(1024)
                .build();

        System.out.println("Advanced Computer: " + advancedComputer);
    }
}

运行 BuilderPatternDemo 类的 main 方法,输出结果应为:

复制代码
Basic Computer: Computer{cpu='Intel i5', gpu='Nvidia GTX 1650', ram=8, storage=512}
Advanced Computer: Computer{cpu='Intel i9', gpu='Nvidia RTX 3080', ram=32, storage=1024}
相关推荐
骑着蜗牛撵大象3275 小时前
Linux 进程间通信之管道:从 pipe() 的内核语义到 FIFO 落地排错
android·java·linux·系统编程·fifo·管道·进程间通信
WJ.Polar5 小时前
Java封装、继承、多态
java·开发语言
..Dauntless..6 小时前
【Linux】一切皆文件和缓冲区
linux·运维·服务器
裕晟资质规划6 小时前
三类资质变更报告时限差在哪?军工 15 日、集成印制 10 日
大数据·服务器·网络
ly76896 小时前
PostgreSQL 备份恢复策略:pg_basebackup、WAL 归档与 PITR 在企业 Java 系统中的落地
java·数据库·postgresql·pitr·pg_basebackup·wal 归档
摇滚侠6 小时前
Java 中如何表示负数,有符号和无符号的区别,补码的计算规则,char byte short int long 的范围
java·开发语言
QMCY_jason6 小时前
x86 ubuntu2204 无gui 安装 openeuler 2203 aarch64版本
linux·运维·服务器
重生之小比特6 小时前
【Linux系统】12 进程程序替换 自定义Shell 命令行解释器
linux·运维·服务器
轻舟技术A6 小时前
Provider 不属于 Agent 核心:rpi 的分层理由与收益
服务器·网络
连山齐名6 小时前
ai应用开发的学习笔记
服务器·笔记·学习