0 前言
Hello,大家好,歡迎來到』自由技藝『的 C++ 系列專題。先宣告下:今天的題目有點』標題黨『之嫌哈,最近手頭有個重構 C++ 程式碼的專案,對於如何保證其擴充套件性,最大程度方便開發者進行二次開發,始終沒有好的思路,於是想到了設計模式中的建造者模式,現分享給大家吧,但是感覺還是有點雞肋,不夠好,也歡迎各位大神指導一二,不甚感激。
1 什麼是建造者模式?
先看下類圖吧:
什麼意思呢?舉個例子:假如我們要造車,車有好多種型號,現有的流水線去如何去適應未來可能的新車型呢
首先,我們假設造車有幾項固定的流程:比如先造發動機(producePartA),然後造車殼(producePartB),再造輪胎(producePartC),最後再安個行車記錄儀或者倒車攝像頭啥的。
接下來,我們就開始造車了,比如要造兩款新車(Product1 和 Product2),那麼我們就需要對應的建造者類(ConcreteBuilder1 和 ConcreteBuilder2)就行。
建造者模式看起來擴充套件性很好,但是有個致命問題,就是造車的流程必須固定,如果某款車型需要在流程 A 和 流程 B 之間需要額外加一步,比如流程 A2,那就不好辦了,只能把這步流程融合在 A 裡或者 B 裡,但是呢?如果沒有建造者模式,我們只能採用以下兩種方式:
最簡單的方法是擴充套件造車基類, 然後建立一系列涵蓋所有引數組合的子類。 但最終你將面對相當數量的子類。 任何新增的引數都會讓這個層次結構更加複雜。
2。 另一種方法則無需生成子類。 你可以在造車基類中建立一個包括所有可能引數的超級建構函式, 並用它來控制車物件。 這種方法確實可以避免生成子類, 但它卻會造成另外一個問題。擁有大量輸入引數的建構函式也有缺陷: 這些引數也不是每次都要全部用上的。通常情況下, 絕大部分的引數都沒有使用, 這使得對於建構函式的呼叫十分不簡潔。
2 建造者模式 C++ 程式碼
#include #include #include #include #include
程式輸出: