天天看點

設計模式---Builder模式

Android源碼設計模式解析與實戰讀書筆記

轉載需注明出處,非常感謝:http://blog.csdn.net/guiping_ding/article/details/52975047

  1. 定義:将一個複雜對象的建構和它的表示分離,使得同樣的建構過程可以建立不同的表示。
  2. 使用場景:

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

    (2). 多個部件或零件,都可以裝配到一個對象中,但是産生的運作結果又不想同時。

    (3). 産品類非常複雜,或者産品類中的調用順序不同産生了不同的作用,這個時候使用構造者模式非常适合。

    (4). 當初始化一個對象特别複雜,如參數多,且很多參數具有預設值時。

  3. 代碼實作:
    /***
       * 計算機抽象類
       * 
       * @author ping
       * 
       */
      public  class Computer {
          protected String mBoard;
          protected String mDisplay;
          protected String mOS; // 系統
    
          public void setmBoard(String mBoard) {
              this.mBoard = mBoard;
          }
    
          public void setmDisplay(String mDisplay) {
              this.mDisplay = mDisplay;
          }
    
          public String getmOS() {
              return mOS;
          }
    
          public void setmOS(String mOS) {
              this.mOS = mOS;
          }
    
          public String getmBoard() {
              return mBoard;
          }
    
          public String getmDisplay() {
              return mDisplay;
          }
    
          public void setOs(String os) {
              this.mOS = os;
          }
    
    
          //建構Builder類
          public static class Builder {
              private Computer mComputer;
    
              public Builder() {
                  super();
                  mComputer = new Computer();
              }
    
              public Builder builderBoard(String board) {
                  mComputer.setmBoard(board);
                  return this;
              }
    
              public Builder builderDisplay(String display) {
                  mComputer.setmDisplay(display);
                  return this;
              }
    
              public Builder builderOS(String os) {
                  mComputer.setOs(os);
                  return this;
              }
    
              public Computer create() {
                  return mComputer;
              }
          }
    
          @Override
          public String toString() {
              return "Computer [mBoard=" + mBoard + ", mDisplay=" + mDisplay
                      + ", mOS=" + mOS + "]";
          }
    
      }
    
               
    測試代碼:
    public class BuildrtTest {
    
        /**
         * @param args
         */
        public static void main(String[] args) {
    
            Computer.Builder mBuilder = new Computer.Builder().builderBoard("因特爾主機闆").builderDisplay("Retina顯示器").builderOS("Mac OS X 10.11");
            System.out.print("\nComputer info: " + mBuilder.create().toString());
    
            Computer mComputer = new Computer.Builder().builderBoard("因特爾主機闆").builderDisplay("Retina顯示器").builderOS("Mac OS X 10.11").create();
            System.out.print("\nComputer info: " + mComputer.getmBoard() +"---" +mComputer.getmDisplay() +"---" + mComputer.getmOS());
    
        }
    
    }
               
    輸出列印:

    Computer info: Computer [mBoard=因特爾主機闆, mDisplay=Retina顯示器, mOS=Mac OS X 10.11]

    Computer info: 因特爾主機闆—Retina顯示器—Mac OS X 10.11

  4. 總結:Builder模式在Android開發中,通常作為配置類的建構器将配置的建構和表示分離開來,同時也是将配置從目标類中隔離出來,避免過多的setter方法。Builder模式比較常見的實作形式是通過調用鍊實作,使得代碼更簡介,易懂。
  5. 優點:
    • 良好的封裝性,使用Builder模式可以使用戶端不必知道産品内部組成細節;
    • 建造者獨立,容易擴充;
  6. 缺點:
    • 産生多餘的Builder對象,消耗記憶體;

繼續閱讀