Java设计模式 _创建型模式_建造者模式(Builder)

一、建造者模式

1、建造者模式(Builder Pattern)是一种创建对象的设计模式。它允许你使用不同的构建策略来创建复杂对象。通常是在复杂类中通过静态内部类(Builder)来进行构建。

2、实现思路:

(1)、创建实体类中,私有化构造方法

(2)、定义静态内部类Builder,Builder类包含和实体类相同的属性,以及每个属性的set方法,以及build()方法去调用实体的构造。

(3)、构建实例对象时,通过静态内部类Builder进行设值在build()进行实例对象的创建。

3、优点

(1)、相对于构造方法的方式,建造者模式无需关心构造方法的参数顺序。

(2)、相对于构造方法的方式,建造者模式套路更优,无需定义更多的构造方法。

(3)、创建实例的方式隐藏在内部,不会暴漏给外部,外部无法知道创建的具体过程。

(4)、创建对象的过程是链路进行设置的,相对而言,代码更灵活和可读性更好。

(5)、相对于new对象,在逐个set赋值的方式。建造者模式是先set,在new的过程。建造者可以确定对象一定存在,而前者可能存在构建失败造成空指针的问题等。

二、代码示例

代码示例:

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

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

    @Override
    public String toString() {
        return "Computer{" + "cpu='" + cpu + '\'' + ", gpu='" + gpu + '\'' + ", ram='" + ram + '\'' +  ", storage='" + storage + '\'' +  '}';
    }

    public static class Builder {
        private String cpu;
        private String gpu;
        private String ram;
        private String storage;

        public Builder setCpu(String cpu) {
            this.cpu = cpu;
            return this;
        }

        public Builder setGpu(String gpu) {
            this.gpu = gpu;
            return this;
        }

        public Builder setRam(String ram) {
            this.ram = ram;
            return this;
        }

        public Builder setStorage(String storage) {
            this.storage = storage;
            return this;
        }

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

    public static void main(String[] args) {
        Computer computer = new Computer.Builder()
                .setCpu("CPU-i7")
                .setGpu("GPU-3080")
                .setRam("16GB")
                .setStorage("1TB")
                .build();
        System.out.println(computer);

        computer = new Computer.Builder()
                .setCpu("CPU-i11")
                .setGpu("GPU-9090")
                .setRam("32GB")
                .setStorage("2TB")
                .build();
        System.out.println(computer);
    }
}

如上的代码示例中,在静态内部类Builder中,每一个set方法中通过return this,实现了设备值的同时,返回房前Builder对象,可以继续调用set方法,进而实现了链路设置的方式。

学海无涯苦作舟!!!

相关推荐
云朵大王7 分钟前
SQL 视图与事务知识点详解及练习题
java·大数据·数据库
我爱Jack29 分钟前
深入解析 LinkedList
java·开发语言
27669582922 小时前
tiktok 弹幕 逆向分析
java·python·tiktok·tiktok弹幕·tiktok弹幕逆向分析·a-bogus·x-gnarly
用户40315986396632 小时前
多窗口事件分发系统
java·算法
用户40315986396632 小时前
ARP 缓存与报文转发模拟
java·算法
小林ixn2 小时前
大一新手小白跟黑马学习的第一个图形化项目:拼图小游戏(java)
java
nbsaas-boot2 小时前
Go语言生态成熟度分析:为何Go还无法像Java那样实现注解式框架?
java·开发语言·golang
hi0_62 小时前
03 数组 VS 链表
java·数据结构·c++·笔记·算法·链表
朝如青丝暮成雪_2 小时前
java的三大特征
java
用户0595661192092 小时前
Java 8 + 特性与 spring Boot 及 hibernate 等最新技术实操内容全解析
java·架构·设计