设计模式-建造者模式

1.概念

建造者模式(builder模式,属于创建型模式):通过将复杂对象的构建过程分解为多个步骤,使得对象的构建更加灵活和可控。

它适用于构建复杂对象,特别是当对象的构建过程涉及多个可选部分

2.Demo

1.创建一个匿名内部类Builder,其属性与外部类的属性相同;

2.将外部类的构造方法私有化(private),使用内部类填充属性;

3.在外部类创建builder()方法;

4.在内部类创建builder()方法。

java 复制代码
public class Student{

    private int id;
    private String name;
    private int age;

    // 1 构建匿名内部类, 属性与Student类属性一致
    public static class Builder {
        private int id;
        private String name;
        private int age;

        public Builder id(int id) {
            this.id = id;
            return this;
        }

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

        public Builder age(int age) {
            this.age = age;
            return this;
        }

        // 4 最终构建返回
        public Student build() {
            return new Student(this);
        }
    }

    // 2 创建静态builder方法,返回Builder类进行构造
    public static Builder builder() {
        return new Builder();
    }

    // 3 构造私有构造方法,将Builder中的属性进行赋值
    private Student(Builder builder) {
        this.id = builder.id;
        this.name = builder.name;
        this.age = builder.age;
    }

    @Override
    public String toString() {
        return "Student{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

测试类:

java 复制代码
public class Main {
    public static void main(String[] args) {
        Student student = Student.builder()
                .id(1)
                .age(12)
                .name("李三")
                .build();
        System.out.println(student);
    }
}

结果输出:

相关推荐
zwxu_5 分钟前
基于vscode连接服务器实现远程开发
java·开发语言·vscode·golang
q__y__L6 分钟前
C# WaitHandle类的几个有用的函数
java·开发语言·c#
七七软件开发15 分钟前
二手交易 app 系统架构分析
java·python·小程序·系统架构·php
都叫我大帅哥23 分钟前
RabbitMQ生产者发布确认:从入门到精通,幽默解析与实战指南
java·rabbitmq
用户61204149221330 分钟前
C语言做的汽车线路模拟查询系统
c语言·后端·设计模式
二级小助手1 小时前
计算机二级java选择题真题【内附解析】
java·计算机二级·全国计算机二级·二级java·java二级·java二级选择题·全国计算机java二级
鲨鱼辣椒_TUT1 小时前
Obsidian结合CI/CD实现自动发布
java·ci/cd·github
海狸老先生6 小时前
Apache Tomcat样例目录session操纵漏洞解读
java·网络安全·tomcat
Jinkxs8 小时前
基础14-Java集合框架:掌握List、Set和Map的使用
java·list
遗憾皆是温柔9 小时前
3.JVM,JRE和JDK的关系是什么
java·开发语言·jvm·面试