Monday, 18 April 2016

Builder pattern : Example


To build a house, we will take several steps : 
 1. build foundation 
 2. build frame 
 3. build exterior 
 4. build interior

Use an abstract class HouseBuilder to define these 4 steps.
Any subclass of HouseBuilder will follow these 4 steps to build house (that is to say to implement these 4 methods in the subclass)

// set steps for building a house
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();
}

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");
    }
}

class TwoStoryHouse extends HouseBuilder {
    public TwoStoryHouse(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 under construction");
    }

    public void buildExterior() {
        // doOverheadDoors()
        // doBrickWorks()
        // doSidingsoffitsGutters()
        // doDrivewayGarageFloor()
        // doDeckRail()
        // doLandScaping()
        house.setProgress("Exterior is waiting to start");
    }

    public void buildInterior() {
        // doAlarmPrewiring()
        // doBuiltinVacuum()
        // doInsulation()
        // doDryWall()
        // doPainting()
        // doLinoleum()
        // doCabinet()
        // doTileWork()
        // doLightFixtureBlinds()
        // doCleaning()
        // doInteriorInspection()
        house.setProgress("Interior is not started yet");
    }
}

No comments:

Post a Comment

Note: only a member of this blog may post a comment.