文章目錄
咱來聊聊做菜那點事兒
“建造者模式”流程圖
建造者模式代碼實現
適用場景
優點
咱來聊聊做菜那點事兒
會做菜嗎?還是經常出去吃啊。做菜很重要的一點就是放調料,調料放好了,一盤菜也就活了。但是調料那么多,怎么能保證每次都放的合規格呢?且不說合不合格,能不漏掉油鹽就很不錯啦,要是一不小心忘了放鹽,那就很尷尬了。
大家都吃過肯德基麥丹勞吧,像漢堡,不管你什么時候去吃,它都是那個味道。難道是說做漢堡的師傅心靈手巧?還是做漢堡的步驟就那么簡單,肉一塊,奶油一涂,倆面包片啪一拍,一個漢堡出來了?
那肯定是人家有一條嚴格的流水線啊,漢堡的各個部件,都是經過獨立加工,然后由一個小哥將各個部件組合在一起,而最后我們能看到的就是小哥將漢堡拿上柜臺。
這么一套流程下來,在設計模式中,就叫“建造者”模式。這個模式具體都涉及到哪些部分呢?首先是各個部件的單獨處理,然后是小哥對各個部件的組合,最后是打包成成品放上柜臺給你。
對應與“建造者模式”,就是{具體建造類}、{指揮者類}、{產品類}。
“建造者模式”流程圖
建造者模式代碼實現
#include using namespace std; //產品類 class Product { public: Product() {} ~Product() {} void setPartA(int param) { this->partA = param; } void setPartB(int param) { this->partB = param; } void setPartC(int param) { this->partC = param; } void show(){ cout << "partA = " << partA << "、partB = " << partB << "、partC = " << endl; } private: int partA; int partB; int partC; }; //抽象建造者類(可以理解為:流程執行的標準) class AbstractBuilder { public: AbstractBuilder(){} virtual ~AbstractBuilder(){} virtual void createProduct() = 0; virtual void buildPartA(int param) = 0; virtual void buildPartB(int param) = 0; virtual void buildPartC(int param) = 0; virtual Product* getProduct() = 0; }; //具體建造者類 class Builder : public AbstractBuilder { public: Builder(){} ~Builder(){} void createProduct() { cout << "開始生產一個漢堡" << endl; curProduct = new Product(); } void buildPartA(int param) { curProduct->setPartA(param); } void buildPartB(int param) { curProduct->setPartB(param); } void buildPartC(int param) { curProduct->setPartC(param); } Product* getProduct() { return curProduct; } private: Product* curProduct; }; //監工類 class Director { public: Director(AbstractBuilder* builder) { curBuilder = builder; } ~Director(){} //如果對參數設置有異議,可以自行對監工類的構造函數進行傳參,但是不能過多 void construct() { //按部就班開始 if (!curBuilder) curBuilder->createProduct(); curBuilder->buildPartA(8); //比方說,肉要烤八分鐘,我也不知道到底烤多久,隨便吧 curBuilder->buildPartB(3); //比方說,奶油擠三圈 curBuilder->buildPartC(2); //這個我知道,面包夾兩片 } private: AbstractBuilder* curBuilder; }; int main() { AbstractBuilder* builder = new Builder(); Director* director = new Director(builder); director->construct(); Product* product = builder->getProduct(); product->show(); return 0; }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87

88
89
90
適用場景
要求構建產品的步驟(算法)是不能劇烈變化的,最好是不變的,這樣就影響了靈活度。
1.隔離了構建的步驟和具體的實現,為產品的具體實現提供了靈活度。 2.封裝和抽象了每個步驟的實現,實現了依賴倒轉原則。 3.封裝了具體的步驟,減少了代碼的冗余。
1
2
3
4
5
C++
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。