Java设计模式(二)
时间:2011-01-01 yeeyan 翻译:易晓斓
Builder
定义
一步一步从简单对象建立起复杂对象
何处使用和益处
仅仅明确类型和内容就可以做出一个复杂对象。建成的对象与创建它的细节分开。
将创建一个复杂对象的过程和该对象所包含的组件做接耦化。
将创建和表达的代码分离。
程序员对创建的过程有更好的控制。
相关模式包括:
抽象工厂模式,它主要是集中在工厂模式的层面,也许简单,也许复杂。而一个Builder模式主要用来建立基于简单对象的复杂对象。
复合模式,主要用来建立复杂对象。
举例
比如建一个房子,我们需要这么几步:
1 打基础
2 建框架
3 建室外
4 建室内
让我们用一个抽象类HouseBuilder来定义这四步。任何HouseBuilder类的子类将遵循这四步来建这个房子(也就是说,实施子类里的四个方法)。然后我们用一个WorkShop的类来强制实施这四步的顺序(也就是说,我们必须要在前三步都完成的情况下,才能建室内)。TestBuilder类将用来测试这些类之间的协调性以及检验建房的过程。
import java.util.*;
class WorkShop {
//force the order of building process
public void construct(HouseBuilder hb) {
hb.buildFoundation();
hb.buildFrame();
hb.buildExterior();
hb.buildInterior();
}
}
Java设计模式(二)(2)
时间:2011-01-01 yeeyan 翻译:易晓斓
//建房的抽象类中定义了建房的4个方法
abstract class HouseBuilder {
protected House house = new House();
protected String showProgress() {
return house.toString();
}
abstract public void buildFoundation();
abstract public void buildFrame();
abstract public void buildExterior();
abstract public void buildInterior();
}
//建一层房子,注意它的4个方法的具体实施
class OneStoryHouse extends HouseBuilder {
public OneStoryHouse(String features) {
house.setType(this.getClass() + " " + features);
}
public void buildFoundation() {
//doEngineering()
//doExcavating()
//doPlumbingHeatingElectricity()
//doSewerWaterHookUp()
//doFoundationInspection()
house.setProgress("foundation is done");
}
public void buildFrame() {
//doHeatingPlumbingRoof()
//doElectricityRoute()
//doDoorsWindows()
//doFrameInspection()
house.setProgress("frame is done");
}
public void buildExterior() {
//doOverheadDoors()
//doBrickWorks()
//doSidingsoffitsGutters()
//doDrivewayGarageFloor()
//doDeckRail()
//doLandScaping()
house.setProgress("Exterior is done");
}
public void buildInterior() {
//doAlarmPrewiring()
//doBuiltinVacuum()
//doInsulation()
//doDryWall()
//doPainting()
//doLinoleum()
//doCabinet()
//doTileWork()
//doLightFixtureBlinds()
//doCleaning()
//doInteriorInspection()
house.setProgress("Interior is under going");
}
}
Java设计模式(二)(3)
时间:2011-01-01 yeeyan 翻译:易晓斓
//建两层房子,注意它的 |