java設計模式----建造者模式
阿新 • • 發佈:2018-12-06
目錄
1.什麼是建造者模式
2.建造者模式的簡單實現(造飛機為例)
3.建造者模式使用場景
一、什麼是建造者模式
建造者模式它分離物件子元件的單獨構造和裝配。從而可以構造出複雜的物件。
由於實現了構造和裝配的解耦。不同的構造器,相同的裝配,可以構建出不同的物件。相同的構建器,不同的裝配順序也可以構建出不同的物件。也就是實現了構建演算法、裝配演算法的解耦,實現了更好的複用。
二、建造者模式的簡單實現(造飛機為例)
假設一個飛機物件的模型如下:
對飛機物件而言,組裝一架飛機需要座位物件、機艙物件、引擎物件。
以下是各物件的實體類:
package builder; /** * 飛機實體類 */ public class Aircraft { //發動機 private AirEngine airEngine; //座位 private AirSeat airSeat; //機艙 private AirRoom airRoom; public AirEngine getAirEngine() { return airEngine; } public void setAirEngine(AirEngine airEngine) {各物件的實體類this.airEngine = airEngine; } public AirSeat getAirSeat() { return airSeat; } public void setAirSeat(AirSeat airSeat) { this.airSeat = airSeat; } public AirRoom getAirRoom() { return airRoom; } public void setAirRoom(AirRoom airRoom) {this.airRoom = airRoom; } } /** * 飛機發動機實體類 */ class AirEngine{ private String engine; public String getEngine() { return engine; } public void setEngine(String engine) { this.engine = engine; } } /** * 飛機座位實體類 */ class AirSeat{ private String seat; public String getSeat() { return seat; } public void setSeat(String seat) { this.seat = seat; } } /** * 飛機機艙實體類 */ class AirRoom{ private String room; public String getRoom() { return room; } public void setRoom(String room) { this.room = room; } }
生產一架飛機需要座位、機艙、引擎等零件
以下是各零件的構建:
package builder; /** * 生產飛機零件介面 */ public interface AircraftBuilder { AirRoom AirRoomBuild(); AirEngine AirEngineBuild(); AirSeat AirSeatBuild(); }構建飛機零件的方法
接下來將由組裝者組裝一架飛機了
package builder; /** * 組裝飛機介面 */ public interface AircraftDirector { Aircraft DirectorAircraft(); }
1 package builder; 2 3 /** 4 * 組裝飛機實現類 5 */ 6 public class MyAircraft implements AircraftDirector{ 7 private AircraftBuilder aircraftBuilder; 8 @Override 9 public Aircraft DirectorAircraft() { 10 Aircraft aircraft = new Aircraft(); 11 aircraft.setAirEngine(aircraftBuilder.AirEngineBuild()); 12 aircraft.setAirRoom(aircraftBuilder.AirRoomBuild()); 13 aircraft.setAirSeat(aircraftBuilder.AirSeatBuild()); 14 return aircraft; 15 } 16 17 public MyAircraft(AircraftBuilder aircraftBuilder) { 18 this.aircraftBuilder=aircraftBuilder; 19 } 20 }組裝飛機實現類
以上,一架飛機就造好了。
客戶使用方法
package builder; public class Click { public static void main(String[] args) { Aircraft aircraft = new MyAircraft(new MyAircraftBuilder()).DirectorAircraft(); System.out.println(aircraft.getAirEngine().getEngine()); System.out.println(aircraft.getAirRoom().getRoom()); System.out.println(aircraft.getAirSeat().getSeat()); } }
三、建造者模式使用場景
構造者模式通常更工廠模式混合使用。工廠負責生產零件,組裝者通常用來組裝零件。它主要用於構建一個複雜的物件。達到解耦和的目的。由於它構造一個產品需要的工序太多,所以不適合簡單類的構建。
在實際開發場景中使用到構造者模式的有
--StringBuilder類的append()方法
--SQL中的PreparedStatement
--JDOM中的DomBuilder、SAXBuilder