宇宙飛船類及子元件類:
package builder_mode;
/**
* 本類整合了飛船子元件
*/
/**
* 宇宙飛船
*/
public class Airship {
/**
* 軌道艙
*/
private OrbitalModule orbitalModule;
/**
* 發動機
*/
private Engine engine;
/**
* 逃逸艙
*/
private EscapeTower escapeTower;
/**
* 發射
*/
public void launch(){
engine.ignition();
orbitalModule.openRest();
}
/**
* 故障
*/
public void fault(){
escapeTower.popup();
}
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) {
this.name = name;
}
/**
* 開發休息平台
*/
public void openRest(){
System.out.println("開發休息平台!");
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
/**
* 發動機
*/
class Engine {
private String name;
public Engine(String name) {
this.name = name;
}
/**
* 點火
*/
public void ignition(){
System.out.println("點火!");
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
/**
* 逃逸艙
*/
class EscapeTower {
private String name;
public EscapeTower(String name) {
this.name = name;
}
/**
* 彈出
*/
public void popup(){
System.out.println("彈出!");
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
建構者類型:
package builder_mode;
/**
* 建構者類型
*/
public interface AirshipBuilder {
/**
* 建構發動機
*/
Engine builderEngine();
/**
* 建構軌道艙
*/
OrbitalModule builderOrbitalModule();
/**
* 建構逃逸艙
*/
EscapeTower builderEscapeTower();
}
具體建構者:
package builder_mode;
/**
* Xxx建構者, 具體建構者, 可以配合工廠模式
*/
public class XxxAirshipBuilder implements AirshipBuilder {
/**
* 建構Xxx牌發動機
*/
@Override
public Engine builderEngine() {
System.out.println("建構Xxx牌發動機!");
return new Engine("Xxx牌發動機");
}
/**
* 建構Xxx牌軌道艙
*/
@Override
public OrbitalModule builderOrbitalModule() {
System.out.println("建構Xxx牌軌道艙!");
return new OrbitalModule("Xxx牌軌道艙");
}
/**
* 建構Xxx牌逃逸艙
*/
@Override
public EscapeTower builderEscapeTower() {
System.out.println("建構Xxx牌逃逸艙!");
return new EscapeTower("Xxx牌逃逸艙");
}
}
組裝者類型:
package builder_mode;
/**
* 組裝者類型
*/
public interface AirshipDirector {
/**
* 組裝宇宙飛船
*/
Airship directAirShip();
}
具體組裝者:
package builder_mode;
/**
* Xxx組裝者, 具體組裝者
*/
public class XxxAirshipDirector implements AirshipDirector {
/**
* 持有具體建構者
*/
private AirshipBuilder builder;
/**
* 構造器(傳入具體建構者)
* @param builder
*/
public XxxAirshipDirector(AirshipBuilder builder) {
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;
}
}
類圖:

測試類:
package builder_mode;
public class Client {
public static void main(String[] args) {
//建立XXX組裝者(傳入XXX建構者)
AirshipDirector director = new XxxAirshipDirector(new XxxAirshipBuilder());
//組裝一個飛船對象出來
Airship ship = director.directAirShip();
//測試功能
ship.launch();
ship.fault();
}
}
執行結果:
建構Xxx牌發動機!
建構Xxx牌軌道艙!
建構Xxx牌逃逸艙!
點火!
開發休息平台!
彈出!