建造者模式

简介: 建造者模式

外观往往和事物的本身完全不符,世人都容易为表面的装饰所欺骗。——《威尼斯商人》

这两天开发中用到了建造者模式,写起来感觉挺爽的

以前我们创建一个javabean

/**
 * 自定义pojo
 */
public static class Teacher {
    private String name;
    private Integer age;
    @Override
    public String toString() {
        return "Teacher{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Integer getAge() {
        return age;
    }
    public void setAge(Integer age) {
        this.age = age;
    }
}

然后给它赋值

Teacher teacher = new Teacher();
teacher.setName("achao");
teacher.setAge(91);
System.out.println(teacher);

建造者模式的话,写起来就要像这样

/**
 * 自定义pojo
 */
public static class Student {
    private String name;
    private Integer age;
    public Student() {
    }
    private Student(Student student) {
        this.name = student.name;
        this.age = student.age;
    }
    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
    private static Builder builder() {
        return new Builder();
    }
    public static class Builder {
        private Student student;
        public Builder() {
            this.student = new Student();
        }
        public Student build() {
            return new Student(this.student);
        }
        public Builder name(String name) {
            this.student.name = name;
            return this;
        }
        public Builder age(Integer age) {
            this.student.age = age;
            return this;
        }
    }

用起来就是这样

Student ruben = Student.builder().name("ruben").age(19).build();
System.out.println(ruben);

那么,每次这么写肯定受不了,于是我们可以使用lombok

只需要在我们的javabean上加个@Builder注解就可以使用建造者模式了

通过查看编译后的class文件可以看到Lombok和我们写的差不多,只不过它用的是全参构造

仿照他的写出来就是这样的

/**
 * 自定义pojo
 */
public static class Student {
    private String name;
    private Integer age;
    Student(String name, Integer age) {
        this.name = name;
        this.age = age;
    }
    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
    private static StudentBuilder builder() {
        return new StudentBuilder();
    }
    public static class StudentBuilder {
        private String name;
        private Integer age;
        StudentBuilder() {
        }
        public StudentBuilder name(String name) {
            this.name = name;
            return this;
        }
        public StudentBuilder age(Integer age) {
            this.age = age;
            return this;
        }
        public Student build() {
            return new Student(name, age);
        }
        @Override
        public String toString() {
            return "StudentBuilder{" +
                    "name='" + name + '\'' +
                    ", age=" + age +
                    '}';
        }
    }
}
相关文章
|
Rust 安全 程序员
|
JavaScript
TypeScript工具类 Partial 和 Required 的详细讲解
TypeScript工具类 Partial 和 Required 的详细讲解
|
弹性计算 网络协议 存储
10分钟幻兽帕鲁服务器搭建保姆级教程
幻兽帕鲁最近非常火。有些小伙伴可能不喜欢跟陌生人一起玩,那么你可以搭建一个专有服务器和朋友一起联机游戏。自己搭建服务器不仅更私密,还能自定义游戏里的一些选项,比如调整工作速度倍率、经验获取倍率等。 这篇教程将引导你在10分钟左右快速完成幻兽帕鲁服务器的搭建。
4089 5
|
11月前
|
人工智能 自然语言处理 IDE
💡通义灵码:让每个人都能成为软件开发的「超级个体」
作为阿里巴巴达摩院推出的先进大模型技术,通义灵码不仅具备强大的自然语言理解和生成能力,更支持多种编程语言和框架,能够广泛适用于不同的开发场景。这意味着,开发者可以借助通义灵码,通过自然语言进行代码生成、自动化测试、文档编写等,甚至还可以根据需求生成完整的项目结构和业务逻辑。
676 9
💡通义灵码:让每个人都能成为软件开发的「超级个体」
|
7月前
|
运维
云产品评测|用操作系统控制台,让运维更简单 获奖名单公布!
云产品评测|用操作系统控制台,让运维更简单 获奖名单公布!
145 3
java使用AOP切面获取请求日志并记录
java使用AOP切面获取请求日志并记录
|
人工智能 大数据 数据中心
算力服务器的崛起:技术革新与市场展望
在数字化浪潮中,算力服务器正经历革命性变化。技术突破如液冷系统提升性能与能效,如宁畅B8000的液冷设计,降低PUE并增强单节点算力。AI服务器市场预计2025年全球达317.9亿美元,中国年复合增长率超19%。国产化趋势明显,如中国电信采用国产芯片服务器。融合架构与绿色节能成为未来关键,适应多变业务需求和环保要求。
286 1
|
机器学习/深度学习 人工智能 自然语言处理
未来AI技术的发展趋势与应用前景探析
随着人工智能(AI)技术的迅猛发展,未来其应用前景愈发广阔。本文将探讨AI技术在各个领域的最新进展,分析其未来发展趋势,以及对社会、经济的深远影响。 【7月更文挑战第10天】
574 2
|
SQL 机器学习/深度学习 缓存
心得经验总结:深入Dapper.NET源码(文长)
心得经验总结:深入Dapper.NET源码(文长)
205 0
如何用牛顿法求一个数的平方根
(一)导数与导函数 导数 设函数y=f(x)在点x0的某个邻域内有定义,当自变量x在x0处有增量Δx,(x0+Δx)也在该邻域内时,相应地函数取得增量Δy=f(x0+Δx)-f(x0);如果Δy与Δx之比当Δx→0时极限存在,则称函数y=f(x)在点x0处可导,并称这个极限为函数y=f(x)在点x0处的导数记作①f'(x0) ;②y'│x=x0 ;③ │x=x0, 即 导函数 如果函数y=f(x)在开区间内每一点都可导,就称函数f(x)在区间内可导。
4333 1