builder模式:
主要解決構造函式引數過多的問題;
起因:物件有多個全域性變數;
解決方法:
1、多個構造方法,第乙個傳入的都是必傳的,後面的構造方法依次加入可選引數;類似於自定義view的構造方法;
缺點:可讀性差;呼叫麻煩,比如兩個必選引數,而想要多傳第四個引數時,還得先給第三個引數設定預設值;
2、空構造方法,為每乙個屬性設定setter和getter;
缺點:物件會產生不一致的狀態,必須將所有set方法全呼叫完成之後才行;類是可變的,不可變類的好處都消失了。
builder:
步驟:
1.類的屬性都是不可變的,用final修飾,在構造方法中設定了值並對外只提供getter方法;
2.私有化構造方法,引數為內部靜態類bulider;
3.內部靜態類builder,構造方法中引數只接收必選的;對於可選引數,分別通過返回值為builder物件的各方法設定;
4.最後在builder類中構建返回值為外部user物件的build方法來new出物件;
優點:解決了前兩種方法的缺點;鏈式呼叫可讀性更佳;builder內部類構造方法只接收必傳引數,且用final修飾;
缺點:產生多餘的builder物件,消耗記憶體;而builder通常用static修飾,靜態類在沒有load進jvm前,所有屬性方法均不在記憶體中;
注意:由於builder是非執行緒安全的,所以要在builder內部類中檢查乙個變數的合法性,必須等到物件建立完成後再檢查;
例項:alertdialog;
設計模式之建造者模式(Builder)
前面介紹過工廠模式了,如果我們需要一輛車並不需要知道車是如何 從哪個工廠裡生產出來的。今天介紹的建造者模式就要說明一下車子是如何製造的。一輛汽車需要不同的原件進行組裝而成的。class tyre class seat class car 工廠裡的工人們知道如何製造車子的輪胎 方向盤 底盤 發動機等等...
設計模式之建造者(Builder)模式
最近在看設計模式,看到了建造者模式 builder 這是我的第一篇設計模式部落格文章,之前看過一些經典模式,沒有記錄下來,以後會相應的將補充一些博文。我們直接進入正題。我想,關於建造者模式的書面定義,大家在不同的書本中肯定會得到標準的官方定義,借用程杰老師的 大話設計模式 當中的定義 將乙個複雜物件...
設計模式之建造者模式 Builder
建造者模式 優點 1.隔離了構建的步驟和具體的實現,為產品的具體實現提供了靈活性 2.封裝和抽象了每個步驟的實現,實現了依賴倒置原則 3.封裝了具體的步驟,減少了 冗餘 缺點 1.要求構建的產品不能劇烈變化 示例 builer.h ifndef bulider h define bulider h ...