【C++23設計模式 】創建型模式4- builder模式

【01 】 builder設計模式 - 類圖

【02】理論理解

(01) 在理解Builder模式時,其一,要分清整體(在Builder中整體是由多個部分或者局部部件組成的,如手機是一個整體,它是由屏幕、外殼、電池、CPU主板等局部的部件組成的)與局部部件的關係。其二,要理解產品固定部分(這裏的部分不是組成部分,從類的角度上分的,一個類由行爲及屬性兩部分組成,這裏的部分就是類的部分)與變動部分(Product的固定部分與變動部分,如果Product是手機,那麼手機的各個局部的組件創建過程是固定的,即它的結構是固定的,結構固定就表明了他的創建過程是固定的。注意這裏創建是從整體的角度,爲什麼要強調這一點,對後面的局部談創建局部部件區別開來,即其一講的問題。那麼手機的變動部分是什麼,它的局部的部件是變動的,如一個手機的CPU,如果裝上華爲的CPU那麼可能就是華爲的手機,但絕對不可能是蘋果的,如果一個手機裝上的局部部件CPU是蘋果的,那麼就可能是蘋果的,其他局部部分的變動也是亦然。)。這一點理解很重要,否則你在看設計模式書本時,裏面有提到這個創建的,那裏創建的,如果你不清楚,是整體的創建(在Director中)還是局部的創建(Builder),那麼,可能會陷入似懂非懂的局面。你可能看不清這兩個類的區別,一個是Product的整體創建算法類即Director,這些是(手機)固定部分,一個是各個Product所有個局部部件的創建的類即Builder,這些是變動部分。

(02) Builder設計模式的使用聲景,一般應該是使用在整體產品(如手機)結構是固定的(先不一開始就複雜化,比如你可能說,華爲的手機結構上與蘋果還是有差異的,如果你這樣複雜化理解,我覺得對你抽象一個事物沒有什麼好處,開始先循序漸進,就像我學數學,先從有理的開始,纔到無理的等,你先抽象在一個簡單的情況下,然後等到自己將設計模式玩得出神入化了,才轉入複雜化去深入探索,學模式我個人理解,是爲了達到“招式”中沒有模式的形,但有模式的神。畢竟實際中很少有完完全全吻合教條)而局部各個組件是變動的(如果某局部組件名字雖然相同擁有的基本功能相同,但材料不同,性能的強弱不同,此局部組的創建過程是不相同的)。

(03)注意,從圖上可以看出在Builder類跟Product類沒有關聯,但是ConcreteBuilder 跟Product則是依賴關係,代碼表現形式是成員變量,建議是private成員變量,因爲Builder對調用者是可見的,但是用戶並不關心產品的創建過程,用戶關心的是產品的表現,即外形表現。

 

【03】實踐代碼及分析

TODO

 

 

【 比較好的參考資料 

1)C++設計模式-生成器
http://blog.chinaunix.net/uid-20665047-id-3626762.html

注:此文的文字說明很不錯,但是代碼部分,我個人覺得的有問題。

2)C++ UML類圖詳解

https://blog.csdn.net/CLinuxF/article/details/88060140

3)【設計模式】C++設計模式

https://www.bilibili.com/video/BV1c4411a7wk?p=11

4)C++設計模式-Builder建造者模式 
https://www.cnblogs.com/jiese/p/3161076.html

此鏈接的源碼舉例很好,很多builder都沒有對product類操作,此例子更接近使用場景。

5)還有大話設計模式中的例子也很好。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章