設計模式——策略模式(C++實現)

来源:http://www.cnblogs.com/070412-zwc/archive/2017/04/26/6766946.html
-Advertisement-
Play Games

程式優化是用於消除程式中大量的if else這種判斷語句 ...


程式優化是用於消除程式中大量的if else這種判斷語句

 1 #include <iostream>
 2 #include <string>
 3 
 4 using namespace std;
 5 
 6 class CashSuper
 7 {
 8 public:
 9         virtual double GetTotalCash(double ddwMoney) = 0;
10 };
11 
12 class CashNormal:public CashSuper
13 {
14 public:
15         virtual double GetTotalCash(double ddwMoney)
16         {
17                 return ddwMoney;
18         }
19 };
20 
21 class CashRebate: public CashSuper
22 {
23 public:
24         CashRebate(float dwRebate):m_Rebate(dwRebate)
25         {
26 
27         }
28 
29         virtual double GetTotalCash(double ddwMoney)
30         {
31                 return m_Rebate * ddwMoney;
32         }
33 
34 private:
35         float m_Rebate;
36 };
37 
38 class CashContext
39 {
40 public:
41         CashContext()
42         {
43         }
44 
45         CashContext(CashSuper* pstTmpCashSuper)
46         {
47                 m_pstCashSuper = pstTmpCashSuper;
48         }
49 
50         void SetCashStrategy(CashSuper* pstTmpCashSuper)
51         {
52                 m_pstCashSuper = pstTmpCashSuper;
53         }
54 
55         double GetTotalCash(double ddwMoney)
56         {
57                 return m_pstCashSuper->GetTotalCash(ddwMoney);
58         }
59 
60 private:
61         CashSuper *m_pstCashSuper;
62 };
63 
64 int main(void)
65 {
66         CashContext* stCashContext = new CashContext(new CashNormal());
67 
68         cout<<"應付價錢為: "<< stCashContext->GetTotalCash(100)<< endl;
69 
70         stCashContext = new CashContext(new CashRebate(0.8));
71 
72         cout<<"應付價錢為: "<< stCashContext->GetTotalCash(100)<< endl;
73 
74         return 0;
75 }
76 ///////
77 [root]$ ./strategy       
78 應付價錢為: 100
79 應付價錢為: 80

 


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

-Advertisement-
Play Games
更多相關文章
  • 參考:http://design-patterns.readthedocs.io/zh_CN/latest/structural_patterns/proxy.html ...
  • 1 #include 2 #include 3 4 using namespace std; 5 6 class Component 7 { 8 public: 9 virtual void operation() = 0; 10 }; 11 12 class ConcreteComponentA:... ...
  • 靜態工廠方法是一種將類的運用者和產生著隔離的設計模式,它是一種創造型模式,但是它不屬於23種基本設計模式中的一種,它是理解抽象工廠的基礎 "參考yqj2065的博客" 上課時yqj2065要求:除了JDK等框架或工具中的類,自己編寫的類不得使用new創建對象(Test除外)。 據說是因為使用new會 ...
  • 概述: GOF定義:給定一個語言,定義它的文法的一種表示,並定義一個解釋器,這個解釋器使用該表示來解釋語言中的句子。 在軟體開發特別是DSL開發中常常需要使用一些相對較複雜的業務語言,如果業務語言使用頻率足夠高,且使用普通的編程模式來實現會導致非常複雜的變化,那麼就可以考慮使用解釋器模式構建一個解釋 ...
  • 讀完了這本書,收穫很多,對程式設計有了很多新的理解。將每章模式的大概要點做了些筆記以備查閱,一些設計模式書讀完也對其瞭解得不是很透徹,需要以後在實踐中來不斷地加深理解吧。讀書過程中用Java跟著實踐了些部分模式的代碼上傳到了 "https://github.com/wanghaoxi3000/des ...
  • 1、使用Eclipse 建立Maven項目(webapp OR quickstart) 2、配置Maven,如下: 3、建立啟動Application 4、編輯Controller 5、通過application.properties對項目進行配置 項目文件佈局如下: 啟動Application程式 ...
  • 現象: 同事負責的項目轉到我的頭上,整理服務過程中發現了隊列的積壓問題。 為了搞清楚積壓的嚴重程度, 對隊列任務數每分鐘進行一次採樣,生成一個走勢圖, 隊列積壓情況一目瞭然,非常嚴重。 分析: 聽了同事對系統的介紹,猜測是mongo性能影響了處理效率,於是針對mongo進行分析 1. 使用mongo ...
  • 1. 前言 2. 所謂習慣認知 3. 開門見山的萬金油 第1條:抽象類設計註重對象性,介面設計註重服務性 第2條:更近的抽象類,更遠的介面 第3條:子類間有關係時考慮用抽象類,沒有關係時一定要用介面 第4條:版本迭代中優先考慮使用抽象類而不是介面 4. 設計是個性的妥協 5. 參考資料 1. 前言 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...