設計模式GOF23——建造者模式

建造者模式(Builder)是創建者模式的一種,是一種負責創建對象的模式。

模式的場景和本質

在實際開發中,有的時候我們需要創建的對象十分複雜,有時候需要很多步奏來處理。
建造者模式的任務就是分離和對象子組件的單獨構造(由Builder負責)和裝配(由Director負責),從而構造出複雜的對象。使用的場景就是構造比較複雜的對象。
由於實現了構造和裝配的解耦。不同的構造器,相同的裝配,也可以做出不同的對象;相同的構造器,不同的構造順序也可以做出不同的對象。也就是實現了構造算法,裝配算法的解耦,實現了更好的複用。

模式的實現

在這樣的設計模式中,有以下幾個角色:
1 builder:爲創建一個產品對象的各個部件指定抽象接口。
2 ConcreteBuilder:實現Builder的接口以構造和裝配該產品的各個部件,定義並明確它所創建的表示,並 提供一個檢索產品的接口。
3 Director:構造一個使用Builder接口的對象。
4 Product:表示被構造的複雜對象。ConcreteBuilder創建該產品的內部表示並定義它的裝配過程,包含定義組成部件的類,包括將這些部件裝配成最終產品的接口。
簡單的實例代碼如下

//模式角色product 創建的具體對象
public class AirShip {
    public OrbitalModule orbitalModule;//軌道倉
    public Engine engine;//引擎
    public Escapelower escapelower;//逃逸艙
    public OrbitalModule getOrbitalModule() {
        return orbitalModule;
    }
    public void setOrbitalModule(OrbitalModule orbitalModule) {
        this.orbitalModule = orbitalModule;
    }
    public Engine getEngine() {
        return engine;
    }
    public void setEngine(Engine engine) {
        this.engine = engine;
    }
    public Escapelower getWscapelower() {
        return escapelower;
    }
    public void setEscapelower(Escapelower escapelower) {
        this.escapelower = escapelower;
    }
}
//模式角色ConcreteBuilder,負責創建對象的各個部分
public interface AirShipBuilder {
    OrbitalModule createOrbitalModule();
    Engine createEngine();
    Escapelower createEscapelower();
}package pattern;
//模式角色Director,負責對象的裝配
public interface AirShipDirector {
    AirShip createAirShip();//組裝飛船對象
}
//AirShipBuilder的實現類
public class MyAirShipBuilder implements AirShipBuilder{

    public Engine createEngine() {
        Engine e = new Engine();
        return e;
    }

    public Escapelower createEscapelower() {
        Escapelower el = new Escapelower();
        return el;
    }

    public OrbitalModule createOrbitalModule() {
        OrbitalModule o = new OrbitalModule();
        return o;
    }

}
//AirShipDirector的實現
public class MyAirShipDirector implements AirShipDirector{
    private AirShipBuilder builder = new MyAirShipBuilder();
    public void setBuilder(AirShipBuilder builder) {
        this.builder = builder;
    }
    public AirShip createAirShip() {
        OrbitalModule orbitalModule = builder.createOrbitalModule();
        Engine engine =builder.createEngine();
        Escapelower escapelower = builder.createEscapelower();
        AirShip airShip = new AirShip();
        airShip.setOrbitalModule(orbitalModule);
        airShip.setEngine(engine);
        airShip.setEscapelower(escapelower);
        return airShip;
    }

}

如果是比較複雜的對象的創建,這樣以來會把一些邏輯和操作分開來,方便管理和理解。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章