欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

深入解析Java的設(shè)計(jì)模式編程中建造者模式的運(yùn)用

 更新時(shí)間:2016年02月03日 16:36:28   作者:Zhang_H  
這篇文章主要介紹了深入解析Java的設(shè)計(jì)模式編程中建造者模式的運(yùn)用,同時(shí)文中也介紹了建造者模式與工廠模式的區(qū)別,需要的朋友可以參考下

定義:將一個(gè)復(fù)雜對(duì)象的構(gòu)建與它的表示分離,使得同樣的構(gòu)建過程可以創(chuàng)建不同的表示。
類型:創(chuàng)建類模式
類圖:

201623163350293.jpg (632×233)

四個(gè)要素

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

代碼實(shí)現(xiàn)

產(chǎn)品的抽象類:

package Builder;
 
import java.util.ArrayList;
 
public abstract class AbstractProduct {
   
  //記錄執(zhí)行順序
  private ArrayList<String> part = new ArrayList<String>();
   
  public abstract void doSomething();
   
  public abstract void doOtherthing();
   
  //final,子類不可重寫
  final public void executive(){
    for(int i=0;i<this.part.size();i++){
      String actionName = this.part.get(i);
      if(actionName.equals("doSomething")){
        this.doSomething();
      }
      else if(actionName.equals("doOtherthing")){
        this.doOtherthing();
      }
    }
  }
   
  //final,子類不可重寫
  final public void setPart(ArrayList<String> part){
    this.part = part;
  }
}

產(chǎn)品的實(shí)現(xiàn)類:

package Builder;
 
public class Product extends AbstractProduct{
 
    //子類具體描述步驟
  public void doSomething(){ 
    System.out.println("will do something...");
  }
   
  public void doOtherthing() {
    System.out.println("Something has done.Otherthing will be done...");
  }
}

建造者抽象類:

package Builder;
 
import java.util.ArrayList;
 
public abstract class Builder {
   
  //設(shè)置產(chǎn)品的不同部分,以獲得不同的產(chǎn)品 
  public abstract void setPart(ArrayList<String> part);
   
  //建造產(chǎn)品 
  public abstract Product buildProduct(); 
}

建造者實(shí)現(xiàn)類:

package Builder;
 
import java.util.ArrayList;
 
public class ConcreteProduct extends Builder{
   
  private Product product = new Product();
   
  public void setPart(ArrayList<String> part) {
    this.product.setPart(part);
  }
   
  public Product buildProduct() {
    return this.product;
  }
 
 
}

導(dǎo)演類:

package Builder;
 
import java.util.ArrayList;
 
//對(duì)不同產(chǎn)品的生產(chǎn)順序再封裝,對(duì)高層屏蔽細(xì)節(jié)
public class Director {
  private ArrayList<String> part = new ArrayList<String>();
  private Builder builder = new ConcreteProduct();
   
  public Product getAProduct() {
    this.part.clear();
    this.part.add("doSomething");
    this.part.add("doOtherthing");
    builder.setPart(part);
    return builder.buildProduct();
  }
}

客戶端:

package Builder;
 
public class Client {
  public static void main(String[] args) {
    Director director = new Director();
    System.out.println("將產(chǎn)生10個(gè)產(chǎn)品");
    for(int i=1;i<11;i++){
      System.out.println("第" + i + "個(gè)產(chǎn)品");
      director.getAProduct().executive();
      System.out.println();
    }
  }
}


建造者模式的優(yōu)點(diǎn)
        首先,建造者模式的封裝性很好。使用建造者模式可以有效的封裝變化,在使用建造者模式的場景中,一般產(chǎn)品類和建造者類是比較穩(wěn)定的,因此,將主要的業(yè)務(wù)邏輯封裝在導(dǎo)演類中對(duì)整體而言可以取得比較好的穩(wěn)定性。
        其次,建造者模式很容易進(jìn)行擴(kuò)展。如果有新的需求,通過實(shí)現(xiàn)一個(gè)新的建造者類就可以完成,基本上不用修改之前已經(jīng)測試通過的代碼,因此也就不會(huì)對(duì)原有功能引入風(fēng)險(xiǎn)。
 
建造者模式與工廠模式的區(qū)別
       我們可以看到,建造者模式與工廠模式是極為相似的,總體上,建造者模式僅僅只比工廠模式多了一個(gè)“導(dǎo)演類”的角色。在建造者模式的類圖中,假如把這個(gè)導(dǎo)演類看做是最終調(diào)用的客戶端,那么圖中剩余的部分就可以看作是一個(gè)簡單的工廠模式了。
       與工廠模式相比,建造者模式一般用來創(chuàng)建更為復(fù)雜的對(duì)象,因?yàn)閷?duì)象的創(chuàng)建過程更為復(fù)雜,因此將對(duì)象的創(chuàng)建過程獨(dú)立出來組成一個(gè)新的類——導(dǎo)演類。也就是說,工廠模式是將對(duì)象的全部創(chuàng)建過程封裝在工廠類中,由工廠類向客戶端提供最終的產(chǎn)品;而建造者模式中,建造者類一般只提供產(chǎn)品類中各個(gè)組件的建造,而將具體建造過程交付給導(dǎo)演類。由導(dǎo)演類負(fù)責(zé)將各個(gè)組件按照特定的規(guī)則組建為產(chǎn)品,然后將組建好的產(chǎn)品交付給客戶端。
 
總結(jié)
       建造者模式與工廠模式類似,他們都是建造者模式,適用的場景也很相似。一般來說,如果產(chǎn)品的建造很復(fù)雜,那么請(qǐng)用工廠模式;如果產(chǎn)品的建造更復(fù)雜,那么請(qǐng)用建造者模式。

相關(guān)文章

最新評(píng)論