zoukankan      html  css  js  c++  java
  • 设计模式——策略模式(C++实现)

    程序优化是用于消除程序中大量的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
  • 相关阅读:
    利用Selenium自动化web测试
    【译】.NET中六个重要的概念:栈、堆、值类型、引用类型、装箱和拆箱
    SlickGrid example 8:折线图
    SlickGrid example 7:鼠标事件
    SlickGrid example 6:Ajax加载
    SlickGrid example 5:带子项的展开收缩
    SlickGrid example 4: 过滤
    CentOS下配置iptables防火墙 linux NAT(iptables)配置
    ntp server
    parted
  • 原文地址:https://www.cnblogs.com/070412-zwc/p/6766946.html
Copyright © 2011-2022 走看看