建造者模式的本质:
分离了对象子组件的单独构造(由Builder来负责)和装配(由Director负责),
从而可以构造出复杂的对象。这个模式适用于:某个对象的构造过程复杂的情况下使用。
由于实现了构造和装配的解耦,不同的构造器,相同的配置,也可以造出不同的对象
相同的构造器,不同的装配顺序也可以造出不同的对象。也就是实现了构建算法,装配算法的解耦,实现了更好的复用。
代码如下
public class AirShip {
private OrbitalModule orbitalModule;//轨道舱
private Engine engine;//发动机
private EscapeTower escapeTower;//逃逸塔
public void setEngine(Engine engine) {
this.engine = engine;
}
public Engine getEngine() {
return engine;
}
public void setEscapeTower(EscapeTower escapeTower) {
this.escapeTower = escapeTower;
}
public EscapeTower getEscapeTower() {
return escapeTower;
}
public OrbitalModule getOrbitalModule() {
return orbitalModule;
}
public void setOrbitalModule(OrbitalModule orbitalModule) {
this.orbitalModule = orbitalModule;
}
}
class OrbitalModule{
private String name;
public OrbitalModule(String name)
{
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) {
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) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}public interface AirShipBuilder {
Engine builderEngine();
OrbitalModule builderOrbitalModul();
EscapeTower builderEscapeTower();
}
public interface AirShipDirector {
AirShip directAirShip();//组装飞船
}
public class XxXAirShipBuilder implements AirShipBuilder{
@Override
public Engine builderEngine() {
System.out.println("构建发动机");
return new Engine("XxX发动机");
}
@Override
public OrbitalModule builderOrbitalModul() {
System.out.println("构建逃逸塔");
return new OrbitalModule("XxX逃逸塔");
}
@Override
public EscapeTower builderEscapeTower() {
System.out.println("构建轨道舱在");
return new EscapeTower("XxX轨道舱");
}//StringBulider
}
public class XxXAirshipDirector implements AirShipDirector {
private AirShipBuilder bulider;
public XxXAirshipDirector(AirShipBuilder bulider) {
this.bulider = bulider;
}
@Override
public AirShip directAirShip() {
Engine e=bulider.builderEngine();
OrbitalModule o=bulider.builderOrbitalModul();
EscapeTower t=bulider.builderEscapeTower();
//装配成飞船对象
AirShip ship=new AirShip();
ship.setEngine(e);
ship.setEscapeTower(t);
ship.setOrbitalModule(o);
return ship;
}
}
public class Client {
public static void main(String[] args) {
AirShipDirector director=new XxXAirshipDirector(new XxXAirShipBuilder());
AirShip ship=director.directAirShip();
System.out.println(ship.getEngine());
}
}