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

建造者模式

文章目录

什么是建造者模式

依赖倒转原则 = 抽象不应该依赖细节,细节应该依赖于抽象
对流程进行抽象,流程中具体细节依赖于这个抽象
过程是稳定的,细节是不同的
建造者模式(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}
相关推荐
懒洋洋大魔王6 分钟前
7.Java高级编程 多线程
java·开发语言·jvm
茶馆大橘10 分钟前
【黑马点评】已解决java.lang.NullPointerException异常
java·开发语言
星辰@Sea14 分钟前
服务注册中心对比及使用场景分析
java·云原生
马剑威(威哥爱编程)17 分钟前
除了递归算法,要如何优化实现文件搜索功能
java·开发语言·算法·递归算法·威哥爱编程·memoization
bug菌¹19 分钟前
滚雪球学SpringCloud[4.1讲]: Spring Cloud Gateway详解
java·spring cloud·微服务
MuseLss39 分钟前
HashMap高频面试知识点
java·开发语言·哈希算法
平头哥在等你39 分钟前
《计算机网络名词解释》
服务器·网络·计算机网络
tyler-泰勒41 分钟前
初始c++:入门基础(完结)
java·开发语言·c++
德迅--文琪1 小时前
SCDN是服务器吗?SCDN防御服务器有什么特点?
运维·服务器
重生之我要进大厂1 小时前
LeetCode 876
java·开发语言·数据结构·算法·leetcode