建造者模式

简介: 建造者模式

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

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

以前我们创建一个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 +
                    '}';
        }
    }
}
相关文章
|
12月前
|
设计模式 Java Maven
【建造者模式】
【建造者模式】
|
6月前
|
设计模式 C++
【C++】—— 建造者模式
【C++】—— 建造者模式
|
算法 程序员
建造者模式的运用
建造者模式的运用
40 0
|
6月前
|
Java Linux Spring
终于懂了建造者模式
终于懂了建造者模式
33 1
|
6月前
创建型 建造者模式
创建型 建造者模式
42 0
|
缓存 Java C++
建造者模式解读
建造者模式解读
建造者模式解读
|
设计模式 C++
2023-6-13-第四式建造者模式
2023-6-13-第四式建造者模式
66 0
|
算法
创建型模式-建造者模式
创建型模式-建造者模式
67 0
|
设计模式
我学会了,建造者模式
建造者模式属于创建型模式,这个类型的设计模式是将 对象的创建和使用解耦了,花式的去创建对象。
150 0
我学会了,建造者模式