建造者模式針對的是復雜對象的構建,比如一個產(chǎn)品有多個部分構成,每個部分都可以單獨進行生產(chǎn),這時候就可以用建造者模式,由Builder構造產(chǎn)品的每個部分,然后又director完成最后產(chǎn)品的組裝。
特點:
1、分工更加明確,組建和構造分開,能更好的控制產(chǎn)品的生產(chǎn)。
2、容易擴展,有新的需求的時候,只要實現(xiàn)Builder借口就可以了。
企業(yè)級開發(fā)和常用框架中的應用:JMail
組成:產(chǎn)品類,抽象建造者,建造者,導演。
產(chǎn)品類:
public class Product{ private String partA;//產(chǎn)品的某個部分,實際開發(fā)中可能對應一個類  private String partB;//產(chǎn)品的某個部分,實際開發(fā)中可能對應一個類  private String partC;//產(chǎn)品的某個部分,實際開發(fā)中可能對應一個類  //構造器及set、get方法}抽象建造者:
//也可以是抽象類public interface Builder{  public void setPartA(String partA);  public void setPartB(String partB);  public void setPartC(String partC);}建造者實現(xiàn)類:
public class BuilderImpl implements Builder{  private Product product;  public BuilderImpl(){ product = new Product(); }  public void builderPartA(){ String partA = new String();//模擬工廠方法生產(chǎn)產(chǎn)品的某一個部分 product.setPartA(partA); }  public void builderPartB(){ String partB = new String();//模擬工廠方法生產(chǎn)產(chǎn)品的某一個部分 product.setPartB(partB); }  public void setPartC(){ String partC = new String();//模擬工廠方法生產(chǎn)產(chǎn)品的某一個部分 product.setPartC(partC); }  public Product getProduct(){ return this.product; }}導演類:
public class Director{ private Builder b ;  public Director(Builder newB){ this.b = newB; }  public void createBuilder(Builder b){ this.b = b; }  public Product constructProduct(){ b.builderPartA(); b.builderPartB(); b.builderPartC(); }}測試類:
public class Demo{ public static void main(String[] args){ Builder b = new BuilderImpl(); Director d = new Director(); d.createBuilder(b); Product p = c.constructProduct(); }}從上面的例子中我們不難發(fā)現(xiàn),如果我們另外實現(xiàn)導演類,完全可能組裝出另一個不同的產(chǎn)品,因為導演類控制了產(chǎn)品的組裝,同樣的,如果我們重新實現(xiàn)抽象構建類,也可能出現(xiàn)完全不同的產(chǎn)品,所以,從中可以發(fā)現(xiàn),構建者模式更加的抽象化,流程化。
相比于抽象工廠模式,不難發(fā)現(xiàn)這兩者驚人的相似,但為什么還會分出兩種不同的設計模式呢,其實重點就在產(chǎn)品的復雜程度和抽象程度上,建造者模式比抽象工廠模式更加的抽象化,復雜化,也就是說建造者模式應對的產(chǎn)品比抽象工廠應對的產(chǎn)品更加復雜,同時,在產(chǎn)品生產(chǎn)流程長更加的抽象。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網(wǎng)。
新聞熱點
疑難解答