1. 程式人生 > >《Java與模式》學習筆記之七―――建造模式(Builder Pattern)

《Java與模式》學習筆記之七―――建造模式(Builder Pattern)

問題:

當我們要建立的物件很複雜的時候(一般是由很多其它的物件組合而成),最好將物件的建立和表示分離開來,這樣做的好處就是通過一步步地進行復雜物件的建立而且每一步構造的過程引入不同的引數,使得相同的建立步驟可以得到不同的物件。

特別是一個物件的多個構造過程的順序一定時,如構造過程A必須在構造過程B之前進行,建造模式是個不錯的選擇。

類圖:

Rose影象就是插入不了,鬱悶!!!把顏色去掉竟然可以了,哈

原始碼實現:

public class Director {

private Builder builder;

public Product Construct()

{

builder = new ConcreteBuilder();

builder.BuildPartA("ActualParaA");

builder.BuildPartB("ActualParaB");

builder.BuildPartC("ActualParaC");

return builder.getProduct();

}

}

public abstract class Builder

{

public abstract void BuildPartA(String strParaA);

public abstract void BuildPartB(String strParaB);

public abstract void BuildPartC(String strParaC);

public abstract Product getProduct();

}

public class ConcreteBuilder extends Builder

{

private Product product = new Product();

public void BuildPartA(String strParaA)

{

product.setParaA(strParaA);

System.out.println("product.setParaA(strParaA)...");

}

public void BuildPartB(String strParaB)

{

product.setParaB(strParaB);

System.out.println("product.setParaB(strParaB)...");

}

public void BuildPartC(String strParaC)

{

product.setParaC(strParaC);

System.out.println("product.setParaC(strParaC)...");

}

public Product getProduct()

{

System.out.println("return product");

return product;

}

}

public class Product

{

private String paraA;

private String paraB;

private String paraC;

public String getParaA()

{

return this.paraA;

}

public void setParaA(String strParaA)

{

this.paraA = strParaA;

}

public String getParaB()

{

return this.paraB;

}

public void setParaB(String strParaB)

{

this.paraB = strParaB;

}

public String getParaC()

{

return this.paraC;

}

public void setParaC(String strParaC)

{

this.paraC = strParaC;

}

}

public class Client

{

public static void main(String[] args)

{

Director director = new Director();

Product product = director.Construct();

System.out.println("product.paraA=" + product.paraA);

System.out.println("product.paraB=" + product.paraB);

System.out.println("product.paraC=" + product.paraC);

}

}

總結:

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

Builder模式和AbstractFactory模式在功能上很相似,因為都是用來建立大的複雜的物件,它們的區別是:Builder模式強調的是一步步建立物件,並通過相同的建立過程可以獲得不同的結果物件,一般來說Builder模式中物件不是直接返回的。而在AbstractFactory模式中物件是直接返回的,AbstractFactory模式強調的是為建立多個相互依賴的物件提供一個同一的介面。