<wbr id="jl7f7"></wbr>

        <i id="jl7f7"></i>
          <acronym id="jl7f7"></acronym>

          <s id="jl7f7"></s>

          <ins id="jl7f7"></ins><button id="jl7f7"><strong id="jl7f7"></strong></button>
          鍍金池/ 教程/ Java/ 建造者模式
          訪(fǎng)問(wèn)者模式
          訪(fǎng)問(wèn)者模式討論篇:java的動(dòng)態(tài)綁定與雙分派
          責任連模式
          迭代器模式
          策略模式
          命令模式
          單例模式
          建造者模式
          解釋器模式
          工廠(chǎng)方法模式
          備忘錄模式
          原型模式
          單例模式討論篇:?jiǎn)卫J脚c垃圾回收
          觀(guān)察者模式
          模版方法模式
          創(chuàng )建類(lèi)模式總結篇
          抽象工廠(chǎng)模式
          中介者模式

          建造者模式

          定義:將一個(gè)復雜對象的構建與它的表示分離,使得同樣的構建過(guò)程可以創(chuàng )建不同的表示。

          類(lèi)型:創(chuàng )建類(lèi)模式

          類(lèi)圖:

          http://wiki.jikexueyuan.com/project/java-design-pattern/images/builder-pattern-1.jpg" alt="builder-pattern" />

          四個(gè)要素

          • 產(chǎn)品類(lèi):一般是一個(gè)較為復雜的對象,也就是說(shuō)創(chuàng )建對象的過(guò)程比較復雜,一般會(huì )有比較多的代碼量。在本類(lèi)圖中,產(chǎn)品類(lèi)是一個(gè)具體的類(lèi),而非抽象類(lèi)。實(shí)際編程中,產(chǎn)品類(lèi)可以是由一個(gè)抽象類(lèi)與它的不同實(shí)現組成,也可以是由多個(gè)抽象類(lèi)與他們的實(shí)現組成。
          • 抽象建造者:引入抽象建造者的目的,是為了將建造的具體過(guò)程交與它的子類(lèi)來(lái)實(shí)現。這樣更容易擴展。一般至少會(huì )有兩個(gè)抽象方法,一個(gè)用來(lái)建造產(chǎn)品,一個(gè)是用來(lái)返回產(chǎn)品。
          • 建造者:實(shí)現抽象類(lèi)的所有未實(shí)現的方法,具體來(lái)說(shuō)一般是兩項任務(wù):組建產(chǎn)品;返回組建好的產(chǎn)品。
          • 導演類(lèi):負責調用適當的建造者來(lái)組建產(chǎn)品,導演類(lèi)一般不與產(chǎn)品類(lèi)發(fā)生依賴(lài)關(guān)系,與導演類(lèi)直接交互的是建造者類(lèi)。一般來(lái)說(shuō),導演類(lèi)被用來(lái)封裝程序中易變的部分。

          代碼實(shí)現

              class Product {
                  private String name;
                  private String type;
                  public void showProduct(){
                      System.out.println("名稱(chēng):"+name);
                      System.out.println("型號:"+type);
                  }
                  public void setName(String name) {
                      this.name = name;
                  }
                  public void setType(String type) {
                      this.type = type;
                  }
              }
          
              abstract class Builder {
                  public abstract void setPart(String arg1, String arg2);
                  public abstract Product getProduct();
              }
              class ConcreteBuilder extends Builder {
                  private Product product = new Product();
          
                  public Product getProduct() {
                      return product;
                  }
          
                  public void setPart(String arg1, String arg2) {
                      product.setName(arg1);
                      product.setType(arg2);
                  }
              }
          
              public class Director {
                  private Builder builder = new ConcreteBuilder();
                  public Product getAProduct(){
                      builder.setPart("寶馬汽車(chē)","X7");
                      return builder.getProduct();
                  }
                  public Product getBProduct(){
                      builder.setPart("奧迪汽車(chē)","Q5");
                      return builder.getProduct();
                  }
              }
              public class Client {
                  public static void main(String[] args){
                      Director director = new Director();
                      Product product1 = director.getAProduct();
                      product1.showProduct();
          
                      Product product2 = director.getBProduct();
                      product2.showProduct();
                  }
              }

          建造者模式的優(yōu)點(diǎn)

          首先,建造者模式的封裝性很好。使用建造者模式可以有效的封裝變化,在使用建造者模式的場(chǎng)景中,一般產(chǎn)品類(lèi)和建造者類(lèi)是比較穩定的,因此,將主要的業(yè)務(wù)邏輯封裝在導演類(lèi)中對整體而言可以取得比較好的穩定性。

          其次,建造者模式很容易進(jìn)行擴展。如果有新的需求,通過(guò)實(shí)現一個(gè)新的建造者類(lèi)就可以完成,基本上不用修改之前已經(jīng)測試通過(guò)的代碼,因此也就不會(huì )對原有功能引入風(fēng)險。

          建造者模式與工廠(chǎng)模式的區別

          我們可以看到,建造者模式與工廠(chǎng)模式是極為相似的,總體上,建造者模式僅僅只比工廠(chǎng)模式多了一個(gè)"導演類(lèi)"的角色。在建造者模式的類(lèi)圖中,假如把這個(gè)導演類(lèi)看做是最終調用的客戶(hù)端,那么圖中剩余的部分就可以看作是一個(gè)簡(jiǎn)單的工廠(chǎng)模式了。

          與工廠(chǎng)模式相比,建造者模式一般用來(lái)創(chuàng )建更為復雜的對象,因為對象的創(chuàng )建過(guò)程更為復雜,因此將對象的創(chuàng )建過(guò)程獨立出來(lái)組成一個(gè)新的類(lèi)——導演類(lèi)。也就是說(shuō),工廠(chǎng)模式是將對象的全部創(chuàng )建過(guò)程封裝在工廠(chǎng)類(lèi)中,由工廠(chǎng)類(lèi)向客戶(hù)端提供最終的產(chǎn)品;而建造者模式中,建造者類(lèi)一般只提供產(chǎn)品類(lèi)中各個(gè)組件的建造,而將具體建造過(guò)程交付給導演類(lèi)。由導演類(lèi)負責將各個(gè)組件按照特定的規則組建為產(chǎn)品,然后將組建好的產(chǎn)品交付給客戶(hù)端。

          總結

          建造者模式與工廠(chǎng)模式類(lèi)似,他們都是建造者模式,適用的場(chǎng)景也很相似。一般來(lái)說(shuō),如果產(chǎn)品的建造很復雜,那么請用工廠(chǎng)模式;如果產(chǎn)品的建造更復雜,那么請用建造者模式。

          日韩性做爰免费a片aa片,天天躁恨恨躁夜躁2020,精品久久综合1区2区3区激情,精产国品一二三产品麻豆

          <wbr id="jl7f7"></wbr>

                <i id="jl7f7"></i>
                  <acronym id="jl7f7"></acronym>

                  <s id="jl7f7"></s>

                  <ins id="jl7f7"></ins><button id="jl7f7"><strong id="jl7f7"></strong></button>