一.定义
将一个复杂对象的构建与表示分离,使得同样的构建过程可以创建不同的表示.
Builder模式是一步一步创建一个复杂对象的创建型模式,它允许用户不知道内部构建细节的情况下,可以更精细的控制对象的构造流程.
该模式是为了将构建该对象的过程和它的部件解耦,使得构建过程和部件的表示隔离开来.
二.使用场景
1.相同的方法,不同的执行顺序,产生不同的事件结果时;
2.多个部件都可以装配到一个对象中,但产生的运行结果又不相同时;
3.产品类非常复杂,或者产品类中的调用顺序不同产生了不同的作用;
4.当初始化一个对象特别复杂,如参数多,且很多参数都有默认值时.
三.简单实现
抽象类
public abstract class Computer {
public Computer() {
}
//主板
protected String board;
//显示器
protected String display;
//操作系统
protected String os;
protected void setBoard(String board){
this.board = board;
};
protected void setDisplay(String display){
this.display = display;
};
protected void setOs(){};
@Override
public String toString() {
return "Computer{" +
"board='" + board + '\'' +
", display='" + display + '\'' +
", os='" + os + '\'' +
'}';
}
}
public abstract class ComputerBuilder {
//设置主机
protected abstract ComputerBuilder buildBoard(String board);
//设置显示器
protected abstract ComputerBuilder buildDisplay(String display);
//设置操作系统
protected abstract ComputerBuilder buildOs();
//创建Computer
protected abstract Computer build();
}
public class MacBook extends Computer {
@Override
protected void setOs() {
this.os = "Mac 系统";
}
}
public class MacBuilder extends ComputerBuilder {
Computer mComputer = new MacBook();
@Override
public MacBuilder buildBoard(String board) {
mComputer.setBoard(board);
return this;
}
@Override
public MacBuilder buildDisplay(String display) {
mComputer.setDisplay(display);
return this;
}
@Override
public MacBuilder buildOs() {
mComputer.setOs();
return this;
}
@Override
public Computer build() {
return mComputer;
}
}
实现效果
private void build() {
Computer computer = new MacBuilder().buildBoard("Intel 主板")
.buildDisplay("Retina 显示器")
.buildOs()
.build();
Log.d(TAG, "computer: " + computer.toString());
}