builder模式可用来自由扩展项目。
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
builder模式的使用场景
1 相同的方法 ,不同的执行顺序,产生不同的事件结果时。
2 多个部件或零件,都可以装配道一个对象中,但是产生的运行结果又不同时。
3 产品类非常复杂,或者产品类中的调用顺序不同产生不同的作用,这个时候用建造者模式
4 当初始化一个对象特别复杂,如参数多,且很多参数都具有默认值时。
public abstract class Computer {
protected String mBoard;
protected String mDisplay;
protected String mOS;
protected Computer() { }
// 设置 CPU 核心数
public void setBoard(String board) {
mBoard = board;
}
// 设置内存
public void setDisplay(String display) {
mDisplay = display;
}
// 设置操作系统
public abstract void setOS();
@Override
public String toString() {
return "Computer [mBoard=" + mBoard + ", mDisplay=" + mDisplay + ", mOS=" + mOS + "]";
}
}
//抽象 Builder 类
public abstract class Builder {
// 设置主机
public abstract void buildBoard(String board);
// 设置显示器
public abstract void buildDisplay(String displau);
// 设置操作系统
public abstract void buildOS();
// 创建 ComputerÏ
public abstract Computer create();
}
//具体的 Computer 类,Macbook
public class Macbook extends Computer {
protected Macbook() {
}
@Override
public void setOS() {
mOS = "Mac OS X 10.10";
}
}
//具体的 Builder 类,
public class MacbookBuilder extends Builder {
private Computer mComputer = new Macbook();
@Override
public void buildBoard(String board) {
mComputer.setBoard(board);
}
@Override
public void buildDisplay(String display) {
mComputer.setDisplay(display);
}
@Override
public void buildOS() {
mComputer.setOS();
}
@Override
public Computer create() {
return mComputer;
}
}
//Director 类,负责构造 Computer
public class Director {
Builder mBuilder = null;
/**
* @param builder
*/
public Director(Builder builder) {
mBuilder = builder;
}
/**
* 构建对象
*/
public void construct(String board, String display) {
mBuilder.buildBoard(board);
mBuilder.buildDisplay(display);
mBuilder.buildOS();
}
}
Builder builder = new MacbookBuilder();
// Director
Director pcDirector = new Director(builder);
// 封装构建过程, 4 核, 内存 2GB, Mac 系统
pcDirector.construct("英特尔主板","Retina 显示器");
// 构建电脑, 输出相关信息
System.out.println("Computer Info : " + builder.create().toString());
android源码中,AlertDialog.Builder使用builder模式