java模式:建造者模式

  我发现不少源码很喜欢用这个模式,好比spring cloud,spring framework。html

  建造者模式(Builder)用以构建各类各样的对象,主要功能就是代替对象的构造函数,更加自由化。spring

  举个栗子,先假设有一个问题,咱们须要建立一个学生对象,属性有name,number,class,sex,age,school等属性,若是每个属性均可觉得空,也就是说咱们能够只用一个name,也能够用一个school,name,或者一个class,number,或者其余任意的赋值来建立一个学生对象,这时该怎么构造?函数

  难道咱们写6个1个输入的构造函数,15个2个输入的构造函数.......吗?这个时候就须要用到Builder模式了。ui

  例子借用:https://www.cnblogs.com/malihe/p/6891920.htmlthis

public class Builder {

    static class Student{
        String name = null ;
        int number = -1 ;
        String sex = null ;
        int age = -1 ;
        String school = null ;

     //构建器,利用构建器做为参数来构建Student对象
        static class StudentBuilder{
            String name = null ;
            int number = -1 ;
            String sex = null ;
            int age = -1 ;
            String school = null ;
            public StudentBuilder setName(String name) {
                this.name = name;
                return  this ;
            }

            public StudentBuilder setNumber(int number) {
                this.number = number;
                return  this ;
            }

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

            public StudentBuilder setAge(int age) {
                this.age = age;
                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.number = builder.number;
            this.school = builder.school ;
            this.sex = builder.sex ;
        }
    }

    public static void main( String[] args ){
        Student a = new Student.StudentBuilder().setAge(13).setName("LiHua").build();
        Student b = new Student.StudentBuilder().setSchool("sc").setSex("Male").setName("ZhangSan").build();
    }
}
相关文章
相关标签/搜索