1.Builder模式
- 定义说明
创建复杂对象,可以精细化的控制对象的构造流程;
解耦,将构建过程与组件分离。
2.UML类图
-
角色介绍
AbstractProduct:抽象产品类,需要构建的目标
AbstractBuilder:抽象Builder,规范产品的组件
ConcreteBuilder:具体Builder
Director:统一构建过程 -
要点
在具体的Builder中创建Product对象,并将其返回
通常产品的构造方法私有,只开放Builder的方式来创建对象
上述的UML类图是较为负责,实际工作中会用更便捷的方式,如下示例
3.简单版本
public class Orchestration {
protected String name;
protected long duration;
protected String type;
protected String author;
private Orchestration() {
}
public static class Builder {
Orchestration orch;
public Builder() {
orch = new Orchestration();
}
public Builder setName(String name) {
orch.name = name;
return this;
}
public Builder setDuration(long duration) {
orch.duration = duration;
return this;
}
public Builder setType(String type) {
orch.type = type;
return this;
}
public Builder setAuthor(String author) {
orch.author = author;
return this;
}
public Orchestration build() {
return orch;
}
}
}
4.Android源码中应用
- AlertDialog的创建是典型Builder模式
5.总结
- 优缺点:
优点:封装性良好,对用户屏蔽了内部实现细节、易于扩展
缺点:会产生多余的Builder对象,这也是大部分设计模式的通病