通常为四个角色:
i) 抽象建造者(Builder)角色:给出一个抽象接口,以规范产品对象的各个组成成分的构造;
ii)具体建造者(ConcretBuilder)角色:它在应用程序的调用下创建产品的实例。完成任务为;
a) 实现抽象建造者Builder接口,给出一步步完成创建产品实例的操作;
b) 在创建完成后,提供产品的实例。
iii) 导演者(Director角色):调用具体建造者角色以创建产品对象;
iv)产品(Product)角色:建造中的复杂对象。一般情况下,一个系统不止一个产品类。
假如我们要组装一台电脑(Computer类),里面有三个配件(Keyboard类,MainFrameBox类,Monitor类)
/** * Computer类 里面有com.jeedroid.part包里的三个属性 */ package com.jeedroid.product; import com.jeedroid.part.*; public class Computer { private Keyboard keyboard; private MainFrameBox mainFrameBox; private Monitor monitor; public Keyboard getKeyboard() { return keyboard; } public void setKeyboard(Keyboard keyboard) { this.keyboard = keyboard; } public MainFrameBox getMainFrameBox() { return mainFrameBox; } public void setMainFrameBox(MainFrameBox mainFrameBox) { this.mainFrameBox = mainFrameBox; } public Monitor getMonitor() { return monitor; } public void setMonitor(Monitor monitor) { this.monitor = monitor; } public Computer(Keyboard keyboard, MainFrameBox mainFrameBox, Monitor monitor) { super(); this.keyboard = keyboard; this.mainFrameBox = mainFrameBox; this.monitor = monitor; } } /** * 这个类调用CreatorComputer类来完成组装工作 */ package com.jeedroid.designpattern; import com.jeedroid.product.Computer; public class Director { private Builder builder; public Director(Builder builder) { this.builder=builder; } public void construct() { builder.buildKeyboard(); builder.buildMainFrameBox(); builder.buildMonitor(); } } /** * 这个类负责具体的组装工作 */ package com.jeedroid.designpattern; import com.jeedroid.part.Keyboard; import com.jeedroid.part.MainFrameBox; import com.jeedroid.part.Monitor; import com.jeedroid.product.Computer; public class CreatorComputer implements Builder { private Keyboard keyboard; private MainFrameBox mainFrameBox; private Monitor monitor; private Computer computer; @Override public Keyboard buildKeyboard() { keyboard=new Keyboard("keyboard"); return keyboard; } @Override public MainFrameBox buildMainFrameBox() { mainFrameBox=new MainFrameBox("MainFrameBox"); return mainFrameBox; } @Override public Monitor buildMonitor() { monitor=new Monitor("monitor"); return null; } @Override public Computer getComputer() { computer=new Computer(keyboard,mainFrameBox,monitor); return computer; } }
测试代码