這篇隨筆的關注點是builder(建立者、生成器)模式:適用的場景是產品區域性加工變化較大,但是組裝過程相對固定。建立者模式和工廠模式有點類似,不過關注點不同。工廠模式往往只關心你要的是什麼,而建立模式則關心的是這個東西的具體細節的建立。例如:
網上找了一張圖,很好的表示了經典建立者模式的靜態結構,其中包含3個角色:
最終加工的產品型別並沒有統一抽象為iproduct介面,主要原因是經過不同的concretebuilder加工後的產品產別性對比較大,沒必要給乙個公共的基準抽象物件。針對特定型別的產品,設計特定的concretebuilder。
下面直接上例子吧,需求如下:
定義目標產品
1public
class vehicle
2
4public ienumerable lights
5 }
定義抽象建立者型別
1public
abstract
class vehiclebuilderbase
2
4public
virtual
void create()
5public
abstract
void addwheels();
6public
abstract
void addlights();
7 }
定義具體的建立者型別
1public
class carbuilder:vehiclebuilderbase
2 ;
6 }78
public
override
void addlights()
9 ;
11 }
12 }
1class bicyclebuilder:vehiclebuilderbase
2 ;
6 }78
public
override
void addlights()
9
12 }
定義產品生產指導類
1public
class vehiclebuilderdirector
2
4public vehicle vehicle }56
public
void construct()
7
12 }
單元測試
1 [testmethod()]
2public
void builduptest()
3
到目前為止,目標已經初步實現了,但是建立者模式暴露出較多的執行步驟,director(client)需要較多的領域知識,很容易造成高耦合。
Android設計模式之Builder模式
設計模式是我們在平時程式設計的過程中對一些常見的問題場景總結出來的最優程式設計套路,按照設計模式的思想,我們在程式設計的過程中遇到類似的問題時可以快速的套用對應的設計模式,從而高效的解決問題。在平時的開發過程中,我們也經常接觸到各種設計模式,甚至我們自己寫的 也會不自覺的使用到設計模式,只是可能叫不...
設計模式之Builder模式
builder模式是將複雜物件的構建和他的表示分離,使得同樣的建立過程可以建立不通的表示 其結構圖為 示例 為 class product1 class product2 class builder class concretebuilder1 public builder virtual conc...
設計模式之Builder模式
builder模式 乙個複雜物件的構建與他的表示分離,使得同樣的構建過程可以建立不同的表示 場景 1 相同的方法,不同的執行順序,產生不同的事件結果 2多個部件或零件,都可以裝配到乙個物件中,但是產生的執行結果又不同。3產生類很複雜,產品類中的呼叫順序產生不同的作用 4初始化物件很複雜,引數很多,且...