建造者模式
建造者模式适用于需要生成的产品对象有复杂的内部结构。
1 //产品 2 public class AirShip { 3 private Engine engine; //发动机 4 private Cabin cabin; //机舱 5 private Excape excape; //逃生舱 6 public Engine getEngine() { 7 return engine; 8 } 9 public void setEngine(Engine engine) { 10 this.engine = engine; 11 } 12 public Cabin getCabin() { 13 return cabin; 14 } 15 public void setCabin(Cabin cabin) { 16 this.cabin = cabin; 17 } 18 public Excape getExcape() { 19 return excape; 20 } 21 public void setExcape(Excape excape) { 22 this.excape = excape; 23 } 24 } 25 class Engine{ 26 String name; 27 } 28 class Cabin{ 29 String name; 30 } 31 class Excape{ 32 String name; 33 }
1 //产品建造 2 public interface AirShipBuilder { 3 Engine createEngine(); 4 Cabin createCabin(); 5 Excape createExcape(); 6 }
1 //指挥者 2 public interface Director { 3 AirShip createAirship(); 4 }
1 //具体的指挥者 2 public class SxtDirector implements Director{ 3 AirShipBuilder builder; 4 //根据不同的建造者 5 public SxtDirector(AirShipBuilder builder) { 6 this.builder = builder; 7 } 8 //相同的安装顺序 9 @Override 10 public AirShip createAirship() { 11 AirShip ship = new AirShip(); 12 ship.setCabin(builder.createCabin()); 13 ship.setEngine(builder.createEngine()); 14 ship.setExcape(builder.createExcape()); 15 return ship; 16 } 17 }
//具体的建造者 public class SxtAirShipBuilder implements AirShipBuilder{ @Override public Engine createEngine() { System.out.println("engine is building"); return new Engine(); } @Override public Cabin createCabin() { System.out.println("cabin is building"); return new Cabin(); } @Override public Excape createExcape() { System.out.println("excape is building"); return new Excape(); } }
1 //用户只需要与指挥者和建造者打交道就可以得到结构复杂的产品 2 public class BuilderDemo { 3 public static void main(String[] args) { 4 AirShipBuilder bu = new SxtAirShipBuilder(); 5 AirShip ship = new SxtDirector(bu).createAirship(); 6 } 7 }