我发现不少源码很喜欢用这个模式,好比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(); } }