Java设计模式--建造者模式

  在了解之前,先假设有一个问题,我们需要创建一个学生对象,属性有name,number,class,sex,age,school等属性,如果每一个属性都可以为空,也就是说我们可以只用一个name,也可以用一个school,name,或者一个class,number,或者其他任意的赋值来创建一个学生对象,这时该怎么构造?

  难道我们写6个1个输入的构造函数,15个2个输入的构造函数.......吗?这个时候就需要用到Builder模式了。给个例子,大家肯定一看就懂:

/**
 * 建造者模式(Builder)
 * @author 尘世间迷茫的小书童
 *
 */
public class Builder {
    
    static class Student{
        private int studentNo;
        private String name;
        private String sex;
        private int age;
        private String classNo;
        private String school;
        
        //构建器,利用构建器作为参数来构建Student对象
        static class StudentBuilder{
            private int studentNo = -1;
            private String name = null;
            private String sex = null;
            private int age = -1;
            private String classNo = null;
            private String school = null;
            
            public StudentBuilder setStudentNo(int studentNo) {
                this.studentNo = studentNo;
                return this;
            }
            
            public StudentBuilder setName(String name) {
                this.name = name;
                return this;
            }
            
            public StudentBuilder setSex(String sex) {
                this.sex = sex;
                return this;
            }
            
            public StudentBuilder setAge(int age) {
                this.age = age;
                return this;
            }
            
            public StudentBuilder setClassNo(String classNo) {
                this.classNo = classNo;
                return this;
            }
        
            public StudentBuilder setSchool(String school) {
                this.school = school;
                return this;
            }
            
            public Student build() {
                return new Student(this);
            }
        }
        
        public Student(StudentBuilder builder){
            this.age = builder.age;
            this.name = builder.name;
            this.school = builder.school ;
            this.sex = builder.sex ;
            this.classNo = builder.classNo;
            this.studentNo = builder.studentNo;
        }
        
    }
    
    public static void main(String[] args) {
        Student a = new Student.StudentBuilder().setAge(23).setName("LiHua").build();
        Student b = new Student.StudentBuilder().setSchool("晋中职业技术学院").setSex("男").setName("ZhangSan").build();
    }
    
}

 

posted @ 2019-07-14 03:35  尘世间迷茫的小书童  阅读(133)  评论(0编辑  收藏  举报