將對象子組件的創建與裝配分離
public class AirShip {//構建的目標對象
Engine engine;
EscapeTower escapeTower;
public void launch()
{
System.out.println(engine.type);
System.out.println(escapeTower.name);
}
}
class Engine{//子組件
public String type;
public Engine(String type)
{
this.type = type;
}
}
class EscapeTower{//子組件
public String name;
public EscapeTower(String type) {
name = type;
}
}
public interface AirShipBuilder {//建造者抽象類
Engine createEngine();
EscapeTower createEscapeTower();
}
class MyAirShipBuilder implements AirShipBuilder{//建造者實現類
@Override
public Engine createEngine() {
// TODO Auto-generated method stub
return new Engine(Thread.currentThread().getStackTrace()[1].getMethodName());
}
@Override
public EscapeTower createEscapeTower() {
// TODO Auto-generated method stub
return new EscapeTower(Thread.currentThread().getStackTrace()[1].getMethodName());
}
}
public class AirDirector {//組裝類
AirShipBuilder builder;
public void SetAirShipBuilder( AirShipBuilder builder)
{
this.builder = builder;
}
AirShip DirectorAirShip()
{
AirShip airShip = new AirShip();
airShip.engine = builder.createEngine();
airShip.escapeTower = builder.createEscapeTower();
return airShip;
}
}
public class Client {//使用類
public static void main(String[] args)
{
AirDirector airDir = new AirDirector();
airDir.SetAirShipBuilder(new MyAirShipBuilder());
airDir.DirectorAirShip().launch();
}
}