設計模式之建造者模式 Builder
阿新 • • 發佈:2017-09-02
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飛船Builder接口及其實現類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("尚學堂牌逃逸塔"); } }
public interface AirShipDirector { AirShip directAirShip(); } public class SxtAirShipDirector implements AirShipDirector{ private AirShipBuilder builder; public SxtAirShipDirector(AirShipBuilder builder) {飛船組裝Director接口及其實現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; } }
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