1. 程式人生 > >java設計模式----建造者模式

java設計模式----建造者模式

目錄

  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