前言:
Android 的设计模式系列文章,欢迎star,持续更新。。。
定义:
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
介绍:
- 建造者模式属于创建型模式。
- 建造模式是将复杂的内部创建封装在内部,对于外部调用的人来说,只需要传入建造者和建造工具,对于内部是如何建造成成品的,调用者无需关心。
- 比如:一个学校中,我们可以有学生,老师,校长三种人物,但是我不喜欢校长,或者老师,我就想学校就只有学生,或者妹子,这是我们就可以通过建造者模式,只设置一种人物,也一样可以上学,下面请看代码。
public class SchoolBuildeMode {
private String student; //学生
private String teacher; //老师
private String principal; //校长
private String meiZi;//妹子
public SchoolBuildeMode(String student, String meiZi) {
this.student = student;
this.meiZi = meiZi;
}
public SchoolBuildeMode(String student, String teacher, String principal) {
this.student = student;
this.teacher = teacher;
this.principal = principal;
}
public static class Builder {
private String student; //学生
private String teacher; //老师
private String principal; //校长
private String meiZi;//妹子
public Builder setStudent(String student) {
this.student = student;
return this;
}
public Builder setTeacher(String teacher) {
this.teacher = teacher;
return this;
}
public Builder setPrincipal(String principal) {
this.principal = principal;
return this;
}
public Builder setMeiZi(String meiZi) {
this.meiZi = meiZi;
return this;
}
public SchoolBuildeMode build() {
return new SchoolBuildeMode(student, teacher, principal);
}
public SchoolBuildeMode build2() {
return new SchoolBuildeMode(student, meiZi);
}
}
/**
* 这个补充函数是为了表达,我这些变量都用来干些什么事情
*/
public void doSomething() {
System.out.println("校长是:" + principal + " 老师是:" + teacher + " 学生是:" + student + " 妹子是: " + meiZi);
}
}
调用:
public void main(String [] args){
//构建一个完整的学校
new SchoolBuildeMode.Builder().setPrincipal("汪涵").setTeacher("钱枫").setStudent("大张伟").build();
//构建一个只有我和苍井空的学校(^_^)
new SchoolBuildeMode.Builder().setPrincipal("我").setMeiZi("苍井空").build2();
}
使用场景:
- 创建一些复杂对象,对象没存存在复杂变化
- 相同的构建过程,不同的创建顺序,产生不同的结果
- 相同的构建过程,配置不一样
优缺点:
- 封装性良好,隐藏内部构建细节
- 具体建造类之间独立,扩展性好
- 产生多余的Build对象,消耗了内存
- 建造者模式所创建的产品一般具有较多的共同点,其组成部分相似;如果产品之间的差异性很大,则不适合使用建造者模式,因此其使用范围受到一定的限制
- 如果产品的内部变化复杂,可能会导致需要定义很多具体建造者类来实现这种变化,导致系统变得很庞大