Android源碼設計模式解析與實戰讀書筆記
轉載需注明出處,非常感謝:http://blog.csdn.net/guiping_ding/article/details/52975047
- 定義:将一個複雜對象的建構和它的表示分離,使得同樣的建構過程可以建立不同的表示。
-
使用場景:
(1). 相同的方法,不同的執行順序,産生不同的事件結果。
(2). 多個部件或零件,都可以裝配到一個對象中,但是産生的運作結果又不想同時。
(3). 産品類非常複雜,或者産品類中的調用順序不同産生了不同的作用,這個時候使用構造者模式非常适合。
(4). 當初始化一個對象特别複雜,如參數多,且很多參數具有預設值時。
- 代碼實作:
測試代碼:/*** * 計算機抽象類 * * @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
- 總結:Builder模式在Android開發中,通常作為配置類的建構器将配置的建構和表示分離開來,同時也是将配置從目标類中隔離出來,避免過多的setter方法。Builder模式比較常見的實作形式是通過調用鍊實作,使得代碼更簡介,易懂。
- 優點:
- 良好的封裝性,使用Builder模式可以使用戶端不必知道産品内部組成細節;
- 建造者獨立,容易擴充;
- 缺點:
- 産生多餘的Builder對象,消耗記憶體;