設計模式——建造者模式/生成器模式(C++實現)

来源:http://www.cnblogs.com/070412-zwc/archive/2017/05/10/6834417.html
-Advertisement-
Play Games

參考:http://design-patterns.readthedocs.io/zh_CN/latest/creational_patterns/builder.html ...


  1 #include <iostream>
  2 #include <string>
  3 
  4 using namespace std;
  5 
  6 class STProduct
  7 {
  8 public:
  9         void setA(string str)
 10         {
 11                 m_a = str;
 12         }
 13 
 14         void setB(string str)
 15         {
 16                 m_b = str;
 17         }
 18 
 19         void setC(string str)
 20         {
 21                 m_c = str;
 22         }
 23 
 24         void Show()
 25         {
 26                 cout<< "Product: "<< m_a<< "!\t"<< m_b<< "!\t"<< m_c<< endl;
 27         }
 28 
 29 private:
 30         string m_a;
 31         string m_b;
 32         string m_c;
 33 };
 34 
 35 class STBuilder
 36 {
 37 public:
 38         STBuilder()
 39         {
 40                 m_pstProduct = new STProduct();
 41         }
 42         virtual ~STBuilder()
 43         {
 44                 delete m_pstProduct;
 45         }
 46 
 47         virtual void BuildPartA() = 0;
 48         virtual void BuildPartB() = 0;
 49         virtual void BuildPartC() = 0;
 50 
 51         virtual STProduct* GetResult()
 52         {
 53                 return m_pstProduct;
 54         }
 55 
 56         STProduct* m_pstProduct;
 57 };
 58 
 59 class STConcreteBuilder: public STBuilder
 60 {
 61 public:
 62         virtual void BuildPartA()
 63         {
 64                 m_pstProduct->setA("A Style");
 65         }
 66 
 67         virtual void BuildPartB()
 68         {
 69                 m_pstProduct->setB("B Style");
 70         }
 71 
 72         virtual void BuildPartC()
 73         {
 74                 m_pstProduct->setC("C Style");
 75         }
 76 };
 77 
 78 class STDirector
 79 {
 80 public:
 81         ~STDirector()
 82         {
 83                 delete m_pstBuilder;
 84         }
 85 
 86         void SetBuilder(STBuilder* pstTmpBuilder)
 87         {
 88                 m_pstBuilder = pstTmpBuilder;
 89         }
 90 
 91         STProduct* Construct()
 92         {
 93                 m_pstBuilder->BuildPartA();
 94                 m_pstBuilder->BuildPartB();
 95                 m_pstBuilder->BuildPartC();
 96 
 97                 return m_pstBuilder->GetResult();
 98         }
 99 
100         STBuilder* m_pstBuilder;
101 };
102 
103 int main(int argc, char* argv[])
104 {
105         STBuilder* pstBuilder = new STConcreteBuilder();
106 
107         STDirector* pstDirector = new STDirector();
108         pstDirector->SetBuilder(pstBuilder);
109 
110         STProduct* pstProduct = pstDirector->Construct();
111         cout<< "Show.................."<< endl;
112         pstProduct->Show();
113 
114         return 0;
115 }
116 //////////////////////////////////////
117 [root@ ~/learn_code/design_pattern/10_builder]$ ./builder
118 Show..................
119 Product: A Style!       B Style!        C Style

 

參考:http://design-patterns.readthedocs.io/zh_CN/latest/creational_patterns/builder.html

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • step1. 導包(導入要使用的標簽的jar文件)。 step2. 使用taglib指令引入要使用的標簽。 taglib指令: uri:標簽的命名空間。 prefix:命名空間的別名。 註: 命名空間:是為了區分同名的元素而添加的首碼。自定義標簽: step1. 寫一個java類,繼承SimpleT ...
  • 題目描述 春春幼兒園舉辦了一年一度的“積木大賽”。今年比賽的內容是搭建一座寬度為n的大廈,大廈可以看成由n塊寬度為1的積木組成,第i塊積木的最終高度需要是hi。 在搭建開始之前,沒有任何積木(可以看成n塊高度為 0 的積木)。接下來每次操作,小朋友們可以選擇一段連續區間[l, r],然後將第第 L ...
  • 在程式遇到問題調試時,有時候需要列印一些中間變數,觀察完調試完又需要把這些列印註釋掉,感覺很麻煩。所以寫了一個小程式,可以設置列印日誌等級。 在主程式設置要列印的日誌等級debug,就把相應的等級的日誌全部打出來觀察。 程式用到了va_list(在C語言中解決變參問題的一組巨集),相關知識可參考htt ...
  • 原文獻上, 點擊滴滴滴 迭代器模式(Iterator)定義: 提供一種方法順序訪問聚合對象的各個元素嗎而又不暴露該對象的內部展示 不用Iterator的壞處 原文中編寫了三個簡單的集合 ArraryList HashSet LinkedList 原先是沒有實現Iterable 內部沒有具體實現ite ...
  • 前言:Zookeeper的監聽機制很多人都踩過坑,感覺實現了watcher 介面,後面節點的變化都會一一推送過來,然而並非如此。 Watch機制官方聲明:一個Watch事件是一個一次性的觸發器,當被設置了Watch的數據發生了改變的時候,則伺服器將這個改變發送給設置了Watch的客戶端,以便通知它們 ...
  • 本文是博主在開發某電商平臺項目的一些雜項記錄,方便自己和團隊同事查閱,偏向於具體技術或應用的細節和個人理解,但也未必非常具體。文中未提的更多內容可能會另起篇章。 導航屬性——EF實體關係fluent配置 AutoMapper Autofac Repository模式 Model & DTO 開源&商 ...
  • 1.Dubbo是什麼? Dubbo是一個分散式服務框架,致力於提供高性能和透明化的RPC遠程服務調用方案,以及SOA服務治理方案。簡單的說,dubbo就是個服務框架,如果沒有分散式的需求,其實是不需要用的,只有在分散式的時候,才有dubbo這樣的分散式服務框架的需求,並且本質上是個服務調用的東東,說 ...
  • 之前在講表拆分的時候氛圍垂直拆分和水平拆分 垂直拆分的查詢其實不難,就是從單表變為了多表,而大部分情況下只是對主表的查詢多,從表的查詢會很少用到,這樣的情況下關聯查詢不需要太多的考慮 水平拆分之前講了大數據量的情況下根據歷史時間來查詢,那麼今天來說另外一種,還有一隻是根據主鍵id取模後根據這樣的規則 ...
一周排行
    -Advertisement-
    Play Games
  • 前言 本文介紹一款使用 C# 與 WPF 開發的音頻播放器,其界面簡潔大方,操作體驗流暢。該播放器支持多種音頻格式(如 MP4、WMA、OGG、FLAC 等),並具備標記、實時歌詞顯示等功能。 另外,還支持換膚及多語言(中英文)切換。核心音頻處理採用 FFmpeg 組件,獲得了廣泛認可,目前 Git ...
  • OAuth2.0授權驗證-gitee授權碼模式 本文主要介紹如何筆者自己是如何使用gitee提供的OAuth2.0協議完成授權驗證並登錄到自己的系統,完整模式如圖 1、創建應用 打開gitee個人中心->第三方應用->創建應用 創建應用後在我的應用界面,查看已創建應用的Client ID和Clien ...
  • 解決了這個問題:《winForm下,fastReport.net 從.net framework 升級到.net5遇到的錯誤“Operation is not supported on this platform.”》 本文內容轉載自:https://www.fcnsoft.com/Home/Sho ...
  • 國內文章 WPF 從裸 Win 32 的 WM_Pointer 消息獲取觸摸點繪製筆跡 https://www.cnblogs.com/lindexi/p/18390983 本文將告訴大家如何在 WPF 裡面,接收裸 Win 32 的 WM_Pointer 消息,從消息裡面獲取觸摸點信息,使用觸摸點 ...
  • 前言 給大家推薦一個專為新零售快消行業打造了一套高效的進銷存管理系統。 系統不僅具備強大的庫存管理功能,還集成了高性能的輕量級 POS 解決方案,確保頁面載入速度極快,提供良好的用戶體驗。 項目介紹 Dorisoy.POS 是一款基於 .NET 7 和 Angular 4 開發的新零售快消進銷存管理 ...
  • ABP CLI常用的代碼分享 一、確保環境配置正確 安裝.NET CLI: ABP CLI是基於.NET Core或.NET 5/6/7等更高版本構建的,因此首先需要在你的開發環境中安裝.NET CLI。這可以通過訪問Microsoft官網下載並安裝相應版本的.NET SDK來實現。 安裝ABP ...
  • 問題 問題是這樣的:第三方的webapi,需要先調用登陸介面獲取Cookie,訪問其它介面時攜帶Cookie信息。 但使用HttpClient類調用登陸介面,返回的Headers中沒有找到Cookie信息。 分析 首先,使用Postman測試該登陸介面,正常返回Cookie信息,說明是HttpCli ...
  • 國內文章 關於.NET在中國為什麼工資低的分析 https://www.cnblogs.com/thinkingmore/p/18406244 .NET在中國開發者的薪資偏低,主要因市場需求、技術棧選擇和企業文化等因素所致。歷史上,.NET曾因微軟的閉源策略發展受限,儘管後來推出了跨平臺的.NET ...
  • 在WPF開發應用中,動畫不僅可以引起用戶的註意與興趣,而且還使軟體更加便於使用。前面幾篇文章講解了畫筆(Brush),形狀(Shape),幾何圖形(Geometry),變換(Transform)等相關內容,今天繼續講解動畫相關內容和知識點,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 什麼是委托? 委托可以說是把一個方法代入另一個方法執行,相當於指向函數的指針;事件就相當於保存委托的數組; 1.實例化委托的方式: 方式1:通過new創建實例: public delegate void ShowDelegate(); 或者 public delegate string ShowDe ...