博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
策略模式
阅读量:4982 次
发布时间:2019-06-12

本文共 3164 字,大约阅读时间需要 10 分钟。

1】什么是策略模式?坊间的解释都比较拗口,而且不好理解。所谓策略模式,先构建一个策略(即子类的实例),再利用这个具体的实例构建一个策略对象,通过调用策略对象的接口可以达到相应具体策略的结果。【2】策略模式代码示例代码示例:/*  * 策略模式  */#include 
#include
#include
using namespace std;class CashSuper{public: virtual double acceptMoney(double money) = 0;};class CashNormal : public CashSuper{public: double acceptMoney(double money) { return money; }};class CashRebate : public CashSuper{private: double discount;public: CashRebate(double dis) { discount = dis; } double acceptMoney(double money) { return money * discount; }};class CashReturn : public CashSuper{private: double moneyCondition; double moneyReturn;public: CashReturn(double mc, double mr) { moneyCondition = mc; moneyReturn = mr; } double acceptMoney(double money) { double result = money; if (money >= moneyCondition) { result = money - floor(money / moneyCondition) * moneyReturn; } return result; }};class CashContext{private: CashSuper *cs;public: CashContext(CashSuper *cs) { this->cs = cs; } double getResult(double money) { return cs->acceptMoney(money); }};void main(){ CashSuper *cs; CashContext *cc; double money = 1000; cs = new CashRebate(0.8); cc = new CashContext(cs); cout << cc->getResult(money) << endl; money = 1000; cs = new CashNormal(); cc = new CashContext(cs); cout << cc->getResult(money) << endl;}
【3】策略与工厂结合模式代码示例/*  * 策略与工厂模式  */#include 
#include
#include
using namespace std;class CashSuper{public: virtual double acceptMoney(double money) = 0;};class CashNormal : public CashSuper{public: double acceptMoney(double money) { return money; }};class CashRebate : public CashSuper{private: double discount;public: CashRebate(double dis) { discount = dis; } double acceptMoney(double money) { return money * discount; }};class CashReturn : public CashSuper{private: double moneyCondition; double moneyReturn;public: CashReturn(double mc, double mr) { moneyCondition = mc; moneyReturn = mr; } double acceptMoney(double money) { double result = money; if (money >= moneyCondition) { result = money - floor(money / moneyCondition) * moneyReturn; } return result; }};class CashContext{private: CashSuper *cs;public: CashContext(string str) { if ("正常收费" == str) { cs = new CashNormal(); } else if ("打9折" == str) { cs = new CashRebate(0.9); } else if ("满300送200" == str) { cs = new CashReturn(300, 200); } } double getResult(double money) { return cs->acceptMoney(money); }};int main(){ double money = 1000; CashContext *cc = new CashContext("打9折"); cout << cc->getResult(money); return 0;}

http://www.cnblogs.com/Braveliu/p/3938368.html

转载于:https://www.cnblogs.com/leijiangtao/p/4534663.html

你可能感兴趣的文章
bzoj1009: [HNOI2008]GT考试 ac自动机+矩阵快速幂
查看>>
Colidity-- StoneWall
查看>>
Leetcode 904. Fruit Into Baskets
查看>>
怎样连接REDIS服务端
查看>>
ajax同步,加载loading的bug
查看>>
秒杀多线程第二篇 多线程第一次亲密接触 CreateThread与_beginthreadex本质区别
查看>>
div滚动条
查看>>
iOS越狱程序开发
查看>>
一个监听事件监听多个按钮
查看>>
调用其他类的方法
查看>>
SQlite数据库
查看>>
前端开发要注意的浏览器兼容性问题整理
查看>>
Python服务器开发 -- 网络基础
查看>>
开源项目Html Agility Pack实现快速解析Html
查看>>
一些常用的js,jquerry 样例
查看>>
Oracle PL/SQL 多重选择句
查看>>
dorado中的creationType选择类型
查看>>
C++11 数值类型和字符串的相互转换
查看>>
无锡盈达聚力科技有限公司
查看>>
tyvj1659中中救援队
查看>>