1. 程式人生 > >設計模式之建造者模式 Builder

設計模式之建造者模式 Builder

cli return over orb stat implement b- none rect

  • 本質與使用場景

技術分享

技術分享

技術分享
public interface AirShipBuilder {

    Engine builderEngine();
    OrbitalModule builderOrbitalModule();
    EscapeTower  builderEscapeTower();

}

public class SxtAirShipBuilder implements AirShipBuilder{  //StringBuilder,以後學習XML解析中,JDOM庫中的類:DomBuilder,SaxBuilder

    @Override
    public
Engine builderEngine() { System.out.println("構建尚學堂牌發動機"); return new Engine("尚學堂牌發動機"); } @Override public OrbitalModule builderOrbitalModule() { System.out.println("構建尚學堂牌軌道艙"); return new OrbitalModule("尚學堂牌軌道艙"); } @Override public EscapeTower builderEscapeTower() { System.out.println(
"構建尚學堂牌逃逸塔"); return new EscapeTower("尚學堂牌逃逸塔"); } }
飛船Builder接口及其實現類 技術分享
public interface AirShipDirector {
    
    AirShip directAirShip();
}

public class SxtAirShipDirector implements AirShipDirector{

    private AirShipBuilder builder;
        
    public SxtAirShipDirector(AirShipBuilder builder) {
        
super(); this.builder = builder; } @Override public AirShip directAirShip() { Engine e = builder.builderEngine(); OrbitalModule o = builder.builderOrbitalModule(); EscapeTower et = builder.builderEscapeTower(); //裝配 AirShip ship = new AirShip(); ship.setEngine(e); ship.setEscapeTower(et); ship.setOrbitalModule(o); return ship; } }
飛船組裝Director接口及其實現 技術分享
public class AirShip {
    
    private OrbitalModule orbitalModule;  //軌道艙
    private Engine engine;                //發動機
    private EscapeTower escapeTower;      //逃逸塔
    
    public void launch(){
        System.out.println("發射!!");
    }
    
    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 EscapeTower getEscapeTower() {
        return escapeTower;
    }
    public void setEscapeTower(EscapeTower escapeTower) {
        this.escapeTower = escapeTower;
    }
}

class OrbitalModule{
    private String name;

    public OrbitalModule(String name) {
        super();
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

class Engine{
    private String name;

    public Engine(String name) {
        super();
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

class EscapeTower{
    private String name;

    public EscapeTower(String name) {
        super();
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}
飛船類 技術分享
public class Client {
    
    public static void main(String[] args) {
        AirShipDirector director = new SxtAirShipDirector(new SxtAirShipBuilder());
        AirShip ship = director.directAirShip();
        System.out.println(ship.getEngine().getName());
        
        ship.launch();
    }
}
調用

設計模式之建造者模式 Builder