Android设计模式之建造者模式(builder pattern)
http://blog.csdn.net/nugongahou110/article/details/50395698
使用builder设计模式完美的优点:具有必填属性和可选属性的区分,更重要的是 可读性很强。
public Student getStudent(){
return new Student.StudentBuilder(1,"小明")//必填属性在构造方法中赋值
.setAge(1)//设置可选属性 年龄
.setGender(1)//设置可选属性 性别 默认1为男
.build();//对象构建完毕的标识,返回Student对象
}
值得注意的几点:
1.Student的构造方法是私有的,也就是说我们不能直接new出Student对象
2.我们又将Student的属性用final修饰了,并且我们在构造方法中都为他们进行了初始化操作,我们只提供了getter方法
3.StudentBuilder的属性中只给我们必须的属性添加的final修饰,所以我们必须在StudentBuilder的构造方法中为他们初始化
builder模式另一个重要特性是:它可以对参数进行合法性验证,如果我们传入的参数无效,我们可以抛出一个IllegalStateException异常,但是我们在哪里进行参数合法性验证也是有讲究的:那就是在对象创建之后进行合法性验证。我们修改StudentBuilder的build()方法
public Student build(){
Student student = new Student(this);
if (student.getAge()>120){
throw new IllegalStateException("年龄超出限制");
}
return student;
}