设计模式笔记——建造者模式

设计模式(创建型)------ 建造者模式

这是一个学生类,它有四个属性,通过构造方法创建它的对象,我们需要填入四个参数,这就导致创建对象的代码有点长(如果他有更多属性时,那会更加恐怖),这看起来不太优雅

java 复制代码
public class Student {
    public int id;
    public int age;
    public int grade;
    public String name;

    public Student(int id, int age, int grade, String name) {
        this.id = id;
        this.age = age;
        this.grade = grade;
        this.name = name;
    }
}

在之前,我们学习过通过StringBuilder来创建一个字符串,它就像一个建造者,可以这个字符串对象中不断添加、删除、修改,最终得到一个字符串对象,参考这种方法,我们是不是也可以设计一个创建学生对象的建造者(学生类的内部类)

java 复制代码
public static class StudentBuilder {
        int id;
        int age;
        int grade;
        String name;

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

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

        public StudentBuilder grade(int grade) {
            this.grade = grade;
            return this;
        }

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

        public Student build() {
            return new Student(id, age, grade, name);
        }
 }

通过一个静态方法,来获取建造者对象

java 复制代码
 //获取建造者
public static StudentBuilder builder() {
     return new StudentBuilder();
}

这样一来,我们就可以通过这样一种方式得到一个对象

java 复制代码
Student student = Student.builder()
                .id(1)
                .age(16)
                .grade(9)
                .name("张三")
                .build();
System.out.println(student);

这看起来优雅多了,当然如果这个类只有两三个简单的属性,我们依然可以采用最原始的构造方法来创建,建造者模式的优雅在属性特别多时才能很好的体现

相关推荐
wb1891 小时前
流编辑器sed
运维·笔记·ubuntu·云计算
嵌入式@秋刀鱼3 小时前
《第四章-筋骨淬炼》 C++修炼生涯笔记(基础篇)数组与函数
开发语言·数据结构·c++·笔记·算法·链表·visual studio code
嵌入式@秋刀鱼3 小时前
《第五章-心法进阶》 C++修炼生涯笔记(基础篇)指针与结构体⭐⭐⭐⭐⭐
c语言·开发语言·数据结构·c++·笔记·算法·visual studio code
m0_678693333 小时前
深度学习笔记26-天气预测(Tensorflow)
笔记·深度学习·tensorflow
桂?4 小时前
使用离线依赖解决Android Studio编译报错(下载不了jar)——笔记
笔记·android studio·jar
秋田君4 小时前
深入理解JavaScript设计模式之策略模式
javascript·设计模式·策略模式
EQ-雪梨蛋花汤5 小时前
【Unity笔记】Unity Animation组件使用详解:Play方法重载与动画播放控制
笔记·unity·游戏引擎
scdifsn5 小时前
动手学深度学习13.3. 目标检测和边界框-笔记&练习(PyTorch)
笔记·深度学习·目标检测·目标识别·标注边界框
不会编程的小江江6 小时前
【设计模式】UML类图与工厂模式
c++·设计模式
霸王蟹6 小时前
前端项目Excel数据导出同时出现中英文表头错乱情况解决方案。
笔记·学习·typescript·excel·vue3·react·vite