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

建造者模式

什么是建造者模式

依赖倒转原则 = 抽象不应该依赖细节,细节应该依赖于抽象

对流程进行抽象,流程中具体细节依赖于这个抽象

过程是稳定的,细节是不同的

建造者模式(Builder),将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示

建造者模式解析

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

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

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

1.定义电脑类(Product):

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 +
                '}';
    }
}
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 创建不同配置的电脑实例:

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}

相关推荐

  1. 建造模式(生成器模式)

    2024-04-10 14:50:03       15 阅读
  2. 建造模式(Builder)

    2024-04-10 14:50:03       40 阅读
  3. 建造模式

    2024-04-10 14:50:03       26 阅读
  4. 建造模式

    2024-04-10 14:50:03       31 阅读
  5. 建造模式(Builder)

    2024-04-10 14:50:03       29 阅读
  6. 建造模式

    2024-04-10 14:50:03       26 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-10 14:50:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-10 14:50:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-10 14:50:03       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-10 14:50:03       20 阅读

热门阅读

  1. 多线程(42)无锁编程

    2024-04-10 14:50:03       16 阅读
  2. react api:forwardRef

    2024-04-10 14:50:03       14 阅读
  3. win10本地安装MySQL数据库

    2024-04-10 14:50:03       16 阅读
  4. u盘在linux上只能读不能写

    2024-04-10 14:50:03       18 阅读
  5. Jones矩阵符号运算

    2024-04-10 14:50:03       17 阅读
  6. 【Vue】动态Icon组件(变量值作为组件名)

    2024-04-10 14:50:03       14 阅读
  7. 【Vue】组件

    2024-04-10 14:50:03       13 阅读
  8. web蓝桥杯真题:年度明星项目

    2024-04-10 14:50:03       14 阅读
  9. c++ 对象切片

    2024-04-10 14:50:03       14 阅读
  10. 浅谈对线程的理解

    2024-04-10 14:50:03       15 阅读