1. 程式人生 > >對Java建造者模式(Builder)的一點理解

對Java建造者模式(Builder)的一點理解

一,Builder模式介紹

    Builder模式是一步一步建立一個複雜物件的建立型模式,它允許使用者在不知道內部建造細節的情況下,可以更精細的控制物件的構造流程。該模式是為了將構建複雜物件的過程和它的部件解耦,是的構建過程和不見得表示隔離開來。

    因為一個複雜的物件有很多大量組成部分,如電腦,有主機,顯示器,作業系統,還有各種小零件等,如何將這些不見組建成一臺電腦,這個裝配過程很漫長,也很複雜,為了在構建過程中對外部隱藏實現細節,就可以使用Builder模式將部件和組裝過程分離,使得構建過程和部件都可以自由擴充套件,兩者之間的耦合也降到最低。

二,Builder模式的定義

    將一個複雜物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示。

三,Builder模式的使用場景

    (1)相同的方法,不同的執行順序,產生不同的事件結果。

    (2)對各部件或零件,都可以配到一個物件中,但是產生的執行結果又不相同時。

    (3)產品類非常複雜,或者產品類中的呼叫順序不同產生了不同的結果,這個時候使用建立者模式非常合適。

    (4)當初始化一個物件特別複雜,如引數多,且很多引數都有預設值時。

四,Builder模式的UML類圖


五,Builder模式簡單例項

(1)電腦的抽象類

    public abstract class Computer {
protected String board;
protected String display;
protected String os;
//構造方法
protected Computer(){

}
//設定主機板
protected void setBoard(String board){
this.board = board;
}
//設定顯示器
protected void setDisplay(String display){
this.display = display;
}
//設定作業系統
protected abstract void setOs();

public String toString() {
return "computer[board="+board+",display="+display+",os="+os+"]";
}

    }

(2)具體的蘋果電腦類,macBook

    public class MacBook extends Computer {
    protected MacBook() {


}


protected void setOs() {
os = "Mac OS X 10.10";
}


    }

    (3)抽象Builder類

    public abstract class Builder {
// 設定主機
public abstract void builderBoard(String board);


// 設定顯示器
public abstract void builderDisplay(String display);


// 設定作業系統
public abstract void buildOS();


// 建立Computer
public abstract Computer create();

    }

    (4)具體的Builder類 MacBookBuilder

     public class MacBookBuilder extends Builder {
     private Computer computer = new MacBook();


      public void builderBoard(String board) {
// TODO Auto-generated method stub
computer.setBoard(board);
}


public void builderDisplay(String display) {
// TODO Auto-generated method stub
computer.setDisplay(display);
}


public Computer create() {
// TODO Auto-generated method stub
return computer;
}


public void buildOS() {
computer.setOs();


}


}

    (5)Director類,負責構造電腦Computer

    public class Director {
Builder builder = null;
public Director(Builder builder){
this.builder = builder;
}

public void construct(String board,String display){
builder.builderBoard(board);
builder.builderDisplay(display);
builder.buildOS();
}

    }

(6)測試Test類

    public class Test {
public static void main(String args[]){
//構造器
Builder builder = new MacBookBuilder();
Director pcDirector = new Director(builder);
//封裝構建過程
pcDirector.construct("intel主機板", "三星顯示器");
//輸出資訊
System.out.println(builder.create().toString());
}

    }

(7)測試結果


    六:總結

  (1),良好的封裝性,不必知道內部組成的細節。

    (2),建造者獨立,容易擴充套件。

    (3),產生多餘的builder物件以及director物件,消耗記憶體。