java常用设计模式1——Builder模式

Builder模式在Android开发中也很常用,通常我们在构建一个复杂的对象的时候会使用此模式,可以将复杂对象的构建和它的表示分离。

特点:
Builder模式通常为链式调用,关键点在于每个set方法都返回自身,也就是return this.

代码示例:
如果我们要构建一个学生对象,要给这个学生设置年龄,性别,身高等参数

public class Student {
    private String name;
    private String sex;
    private String age;

    public Student() {
    }

    public Student(String name, String sex, String age) {
        this.name = name;
        this.sex = sex;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public String getAge() {
        return age;
    }

    public void setAge(String age) {
        this.age = age;
    }

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

builder类:

public class StudentBuilder {

    private String name;
    private String sex;
    private String age = "";

    private StudentBuilder() {//将StudentBuilder的构造函数私有化,使外部不能访问内部属性,用户
        //唯一能够设置属性的地方就是通过Builder对象,也就是用户只能通过Builder对象构造StudentConfig对象
        //这就是构建和表示相分离
    }

    public static class Builder {
        private String name;//必传参数
        private String sex;//必传参数
        private String age = "";//可选参数

        public Builder setName(String name) {
            this.name = name;
            return this;//返回自身是实现链式调用的关键
        }

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

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

        public Student create() {
            Student student = new Student();
            student.setAge(age);
            student.setName(name);
            student.setSex(sex);
            return student;
        }
    }
}

使用和不使用builder模式对比:

        //传统方式1  构造函数传参,适用于参数少的对象
        Student student1 = new Student("xiaoxiao", "女", "19");
        //传统方式2  挨个传参
        Student student2 = new Student();
        student2.setName("小小");
        student2.setSex("女");
        student2.setAge("19");
        //Builder模式
        Student student3 = new StudentBuilder.Builder()
                .setAge("19")
                .setName("xiaoxiao")
                .setSex("女")
                .create();

builder

当对象很复杂,参数类型比较多的时候,使用builder模式的链式调用会更清晰。

猜你喜欢

转载自blog.csdn.net/baidu_31093133/article/details/79941496