使用场景:某个对象构建过程复杂的情况,需要按照步骤去处理;
建造者模式的本质:分离了对象子组件的单独构造(builder)和装配(director),可以根据不同的装配者生产不同的产品;实现了组件间解耦,从而实现了复用;
代码实现
1, 基本组件
// 主组件
package builder;
public class AirShip {
private OrbitalMoudle orbitalMoudle; // 轨道舱
private Engine engine; // 发动机
private EscapeTower escapeTower; // 逃逸塔
public OrbitalMoudle getOrbitalMoudle() {
return orbitalMoudle;
}
public void setOrbitalMoudle(OrbitalMoudle orbitalMoudle) {
this.orbitalMoudle = orbitalMoudle;
}
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;
}
}
// 零件三个
// 1
package builder;
public class EscapeTower {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public EscapeTower(String name) {
super();
this.name = name;
}
}
// 2
package builder;
public class Engine {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Engine(String name) {
super();
this.name = name;
}
}
// 3
package builder;
public class OrbitalMoudle {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public OrbitalMoudle(String name) {
super();
this.name = name;
}
}
2,抽象接口
package builder;
public interface AirShipBuilder {
OrbitalMoudle buildOrbitalMoudle();
Engine buildEngine();
EscapeTower buildEscapeTower();
}
package builder;
public interface AirShipDiretor {
AirShip createAirShip();
}
3,实现接口类 (根据不同的类生产不同的产品)
package builder;
public class LeonAirShipBuilder implements AirShipBuilder { // 类似的stringbuidler; xml解析中的Dombuilder,saxbuilder;
@Override
public OrbitalMoudle buildOrbitalMoudle() {
System.out.println("构建LEON的轨道舱");
return new OrbitalMoudle("LEON的轨道舱");
}
@Override
public Engine buildEngine() {
// TODO Auto-generated method stub
System.out.println("构建LEON的引擎");
return new Engine("LEON的引擎");
}
@Override
public EscapeTower buildEscapeTower() {
// TODO Auto-generated method stub
System.out.println("构建LEON的逃逸舱");
return new EscapeTower("LEON的逃逸舱");
}
}
package builder;
public class LeonAirShipDiretor implements AirShipDiretor {
@Override
public AirShip createAirShip() {
// TODO Auto-generated method stub
// 完成构建
AirShipBuilder builder = new LeonAirShipBuilder();
OrbitalMoudle orbitalMoudle = builder.buildOrbitalMoudle();
Engine engine = builder.buildEngine();
EscapeTower escapeTower = builder.buildEscapeTower();
// 完成组装
AirShip airShip= new AirShip();
airShip.setOrbitalMoudle(orbitalMoudle);
airShip.setEscapeTower(escapeTower);
airShip.setEngine(engine);
return airShip;
}
}
4,调用
package builder;
public class Client {
public static void main(String[] args) {
AirShip airShip = new LeonAirShipDiretor().createAirShip();
System.out.println(airShip.getEngine().getName());
}
}