用C++跟你聊聊“建造者模式”

      網友投稿 641 2025-04-01

      文章目錄

      咱來聊聊做菜那點事兒

      “建造者模式”流程圖

      建造者模式代碼實現

      適用場景

      優點

      咱來聊聊做菜那點事兒

      會做菜嗎?還是經常出去吃啊。做菜很重要的一點就是放調料,調料放好了,一盤菜也就活了。但是調料那么多,怎么能保證每次都放的合規格呢?且不說合不合格,能不漏掉油鹽就很不錯啦,要是一不小心忘了放鹽,那就很尷尬了。

      大家都吃過肯德基麥丹勞吧,像漢堡,不管你什么時候去吃,它都是那個味道。難道是說做漢堡的師傅心靈手巧?還是做漢堡的步驟就那么簡單,肉一塊,奶油一涂,倆面包片啪一拍,一個漢堡出來了?

      那肯定是人家有一條嚴格的流水線啊,漢堡的各個部件,都是經過獨立加工,然后由一個小哥將各個部件組合在一起,而最后我們能看到的就是小哥將漢堡拿上柜臺。

      這么一套流程下來,在設計模式中,就叫“建造者”模式。這個模式具體都涉及到哪些部分呢?首先是各個部件的單獨處理,然后是小哥對各個部件的組合,最后是打包成成品放上柜臺給你。

      對應與“建造者模式”,就是{具體建造類}、{指揮者類}、{產品類}。

      “建造者模式”流程圖

      建造者模式代碼實現

      #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

      用C++跟你聊聊“建造者模式”

      88

      89

      90

      適用場景

      要求構建產品的步驟(算法)是不能劇烈變化的,最好是不變的,這樣就影響了靈活度。

      1.隔離了構建的步驟和具體的實現,為產品的具體實現提供了靈活度。 2.封裝和抽象了每個步驟的實現,實現了依賴倒轉原則。 3.封裝了具體的步驟,減少了代碼的冗余

      1

      2

      3

      4

      5

      C++

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:如何翻到下一空白頁(如何將空白頁放到下面)
      下一篇:使用WPS拼寫檢查來提示單詞是否拼寫錯誤 并關閉拼寫檢查
      相關文章
      亚洲国产一级在线观看| 亚洲成a人片在线播放| 亚洲色大成网站www永久男同| 国产亚洲精品拍拍拍拍拍| 久久精品国产亚洲AV电影网| 亚洲欧美日韩综合俺去了| 亚洲精品国产福利在线观看| 国产成人A人亚洲精品无码| 亚洲AV午夜福利精品一区二区| 亚洲日韩激情无码一区| 激情综合色五月丁香六月亚洲| 久久久久亚洲AV无码专区桃色| 浮力影院亚洲国产第一页| 亚洲日韩在线第一页| 亚洲熟女乱综合一区二区| 中文字幕日韩亚洲| 亚洲最大激情中文字幕| 国产成人无码综合亚洲日韩| 亚洲av无码乱码国产精品fc2| 亚洲国产精品无码久久久蜜芽| 久久精品国产亚洲AV麻豆王友容| 亚洲a在线视频视频| 亚洲高清无在码在线无弹窗| 亚洲伊人久久大香线焦| 中文字幕无码亚洲欧洲日韩| 亚洲国产高清国产拍精品| 亚洲av再在线观看| 中文字幕第一页亚洲| 亚洲成av人片在线观看无码不卡| 亚洲电影一区二区三区| 亚洲美女中文字幕| 亚洲三级高清免费| 国产精品亚洲一区二区三区久久| 亚洲精品动漫人成3d在线| 亚洲欧洲久久av| 久久精品亚洲综合专区| 亚洲系列国产精品制服丝袜第 | 亚洲精品免费在线视频| 亚洲日本国产精华液| 亚洲午夜理论片在线观看| jzzijzzij在线观看亚洲熟妇|