理解:
需要构建很多个零件(零件来源于工厂),并将零件按照一定的步骤组装成一个产品(如iphone6)。
package com.zhang.buider;
/**
* 宇宙飞船类
*
* @author zhangjianbin
*
*/
public class AirShip {
/**
* 飞船所需的零件类
*/
private OrbitalModule orbitalModule; // 轨道舱
private Engine engine; // 发动机
private EscapeTower escapeTower; // 逃逸舱
/**
* 发射方法
*/
public void lunth() {
System.err.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;
}
}
package com.zhang.buider;
/**
* 发动机类
* @author zhangjianbin
*
*/
public 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;
}
}
package com.zhang.buider;
/**
* 逃逸舱类
*
* @author zhangjianbin
*
*/
public 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;
}
}
package com.zhang.buider;
/**
* 轨道舱类
*
* @author zhangjianbin
*
*/
public 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;
}
}
package com.zhang.buider;
/**
* 构建飞船的接口
*
* 提供三个方法,用于构建子组件对象
*
* @author zhangjianbin
*
*/
public interface AirShipBuider {
/**
* 构建发动机对象
*
* @return
*/
Engine buiderEngine();
/**
* 构建轨道舱对象
*
* @return
*/
OrbitalModule buiderOrbitalModule();
/**
* 构建逃逸舱对象
*
* @return
*/
EscapeTower buiderEscapeTower();
}
package com.zhang.buider;
/**
* 构建飞船的实现类
*
* @author zhangjianbin
*
*/
public class SxtAirShipBuider implements AirShipBuider {
@Override
public Engine buiderEngine() {
System.err.println("构建发动机");
return new Engine("发动机"); //可以利用工厂模式创建对象 或单例模式
}
@Override
public OrbitalModule buiderOrbitalModule() {
System.err.println("构建轨道舱");
return new OrbitalModule("轨道舱");
}
@Override
public EscapeTower buiderEscapeTower() {
System.err.println("构建逃逸舱");
return new EscapeTower("逃逸舱");
}
}
package com.zhang.buider;
/**
* 装配接口
*
* 用于装配子组件
*
* @author zhangjianbin
*
*/
public interface AirShipDirector {
/**
* 组装飞船对象
* @return
*/
AirShip directorAirShip();
}
package com.zhang.buider;
/**
* 装配飞船
*
* @author zhangjianbin
*
*/
public class SxtAirShipBuiderDirector implements AirShipDirector {
/**
* 定义构建者,因为装配者要调用构建者
*/
private AirShipBuider airShipBuider;
/**
* 创建装配者对象时,传入构建者
*
* @param airShipBuider
*/
public SxtAirShipBuiderDirector(AirShipBuider airShipBuider) {
this.airShipBuider = airShipBuider;
}
@Override
public AirShip directorAirShip() {
/**
* 通过传入的构建者对象,构建相应的子组件对象
*/
Engine engine = airShipBuider.buiderEngine();
OrbitalModule module = airShipBuider.buiderOrbitalModule();
EscapeTower escapeTower = airShipBuider.buiderEscapeTower();
AirShip airShip = new AirShip();
airShip.setEngine(engine);
airShip.setOrbitalModule(module);
airShip.setEscapeTower(escapeTower);
return airShip;
}
}
public class Client {
public static void main(String[] args) {
/**
* 创建装配者 和 构建者
*/
AirShipDirector airShipDirector =
new SxtAirShipBuiderDirector(new SxtAirShipBuider());
/**
* 对过装配者获取飞船对象
*/
AirShip airShip = airShipDirector.directorAirShip();
/**
* 发射飞船
*/
airShip.lunth();
}
}