建造者模式

简介: 建造者模式

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

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

以前我们创建一个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 +
                    '}';
        }
    }
}
相关文章
11.建造者模式
1建造者模式的核心内容是: A:不同的要建造的产品。 B:有一个设计师Director类来直到进行建造。 2建造者模式的作用:将产品的内部表象和产品的生成过程分割开来。 3建造者模式具体描述 //建造模式:将产品的内部表象和产品的生成过程分割开来, //从而使一个建造过程生成具有不同的内部表象的产品对象。 //建造模式使得产品内部表象可以独
957 0
|
算法 程序员
建造者模式的运用
建造者模式的运用
59 0
|
设计模式 Java Maven
【建造者模式】
【建造者模式】
|
3月前
|
设计模式 C# C++
建造者模式详解
建造者模式是一种创建型设计模式,通过将对象的构造与表示分离,使得同样的构建过程可以创建不同的对象。它适用于复杂对象的构建,如汽车制造、软件配置生成等场景。该模式的核心角色包括抽象建造者、具体建造者、产品和指挥者。优点包括解耦构造和表示、代码复用性强、易于扩展;缺点是增加代码复杂度,对产品组成部分有依赖。
69 3
|
C++ uml
C++建造者模式
简述 建造者模式(Builder Pattern),旨在将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 简述 模式结构 优缺点 适用场景 案例分析 代码实现 版权所有:一去丶二三里,转载请注明出处:http://blog.csdn.net/liang19890820 模式结构 UML 结构图: 抽象建造者(B
1463 0
|
设计模式 C++
2023-6-13-第四式建造者模式
2023-6-13-第四式建造者模式
83 0
|
10月前
|
Java Linux Spring
终于懂了建造者模式
终于懂了建造者模式
45 1
|
设计模式
我学会了,建造者模式
建造者模式属于创建型模式,这个类型的设计模式是将 对象的创建和使用解耦了,花式的去创建对象。
164 0
我学会了,建造者模式
|
10月前
|
设计模式 C++
【C++】—— 建造者模式
【C++】—— 建造者模式