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

建造者模式

文章目录

什么是建造者模式

依赖倒转原则 = 抽象不应该依赖细节,细节应该依赖于抽象
对流程进行抽象,流程中具体细节依赖于这个抽象
过程是稳定的,细节是不同的
建造者模式(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}
相关推荐
上海云盾第一敬业销售10 分钟前
免费的DDOS防护对网站业务有用吗?
运维·服务器·网络
珹洺11 分钟前
数据库系统概论(九)SQL连接查询语言超详细讲解(附带例题,表格详细讲解对比带你一步步掌握)
java·数据库·sql
keyBird在成长32 分钟前
Java集合操作:如何避免并发修改异常
java·windows·python
2301_8187320636 分钟前
hadoop 无法存储数据到hbase里面 已经解决
java·大数据·数据库·hadoop·centos·hbase
悟能不能悟1 小时前
Logback 在 Spring Boot 中的详细配置
java·spring boot·logback
乌托邦的逃亡者1 小时前
使用JProfiler进行Java应用性能分析
java·开发语言·性能优化
永日456701 小时前
java小结(一)
java·开发语言
神仙别闹1 小时前
基于Java(SSM)+MySQL实现(Web)具有智能推荐功能的图书销售系统
java·前端·mysql
奋斗的袍子0071 小时前
Spring Boot 拦截器:解锁5大实用场景
java·spring boot·后端·拦截器·interceptor
张小九991 小时前
服务器修改/home的挂载路径
linux·运维·服务器