开场白
构建与表现分离。把一个复杂对象的构建与其表现分离。不同的构建产生不同的表现,例如:Dialog构建不同产生不同表现,有的需要标题,有的不需要标题只有内容,有的需要确定按钮,有的不需要取消按钮等。
使用场景
- 初始化一个复杂对象,需要配置很多参数。
- 不同的构建,需要产生不同的表现。
优点
- 良好的封装性,使用Builder模式客户端不需要知道产品内部组成细节
-
缺点
-
UML
Computer:抽象类
- Builder:抽象Builder类,规范产品的组建,一般由子类实现具体组件过程
- MacBookProBuilder:具体Builder类
- Director:统一组装过程
通常在使用Builder过程中,Director角色被忽略,从而仅仅通过Builder构建链式调用。
Coding
public abstract class Computer {protected String mBoard;protected String mDisplay;protected String mOS;protected Computer () {}public void setBoard(String board) {mBoard = board;}public void setDisplay(String display) {mDisplay = display;}public abstract void setOS();public String toString() {return "Computer [mBoard= " + mBoard + ", mDisplay= " + mDisplay + ", mOS= " + mOS + "]";}}
public class MacBookPro extends Computer {protected MacBookPro() {}@Overridepublic void setOS() {mOS = "MAC OS X 12.3.1";}}
public abstract class Builder {public abstract void buildBoard(String board);public abstract void buildDisplay(String display);public abstract void buildOS();public abstract Computer create();}
public class MacBookBuilder extends Builder {private Computer mComputer = new MacBookPro();@Overridepublic void buildBoard(String board) {mComputer.setBoard(board);}@Overridepublic void buildDisplay(String display) {mComputer.setDisplay(display);}@Overridepublic void buildOS(){mComputer.setOS();}@Overridepublic Computer create() {return mComputer;}}
public class Director {Builder mBuilder = null;public Director(Builder builder) {mBuilder = builder;}public void constructor(String board,String display) {mBuilder.buildBoard(board);mBuilder.buildDisplay(display);mBuilder.buildOS();}}
public class Test {public static void main() {Builder builder = new MacBookProBuilder();Director director = new Direcotr(builder);director.construct("华硕主板","三星显示器");System.out.println("Computer info: " + builder.create().toString());}}
