2.策略模式
来源:互联网 发布:淘宝跨店抵用券怎么用 编辑:程序博客网 时间:2024/05/16 15:49
1策略模式的核心内容是:
A:包含策略的抽象类
B:不同的策略分别实现
C:策略控制器,通过这个策略控制器实现调度控制策略。
2策略模式的作用是根据传递进去的参数不同,实现调度执行不同的策略。
3策略模式具体描述
策略模式:策略模式针对一组算法,将每一个算法封装到具有共同接口的独立的类中,
从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下
发生变化。策略模把行为和环境分开。环境类负责维持和查询行为类,
各种算法在具体的策略类中提供。由于算法和环境独立开来,算法的增减,
修改都不会影响到环境和客户端。
跟不同类型的MM约会,要用不同的策略,有的请电影比较好,
有的则去吃小吃效果不错,有的去海边浪漫最合适,但目的都是为了得到MM的芳心,
我的追MM锦囊中有好多Strategy哦。
策略的抽象类,接口,抽象类的指针可以访问所有子类对象,(纯虚函数)
实现的各种策略,各种策略的实现类,都必须继承抽象类
策略的设置接口类,设置不同策略
4.策略模式类图
5.代码:
#include<iostream>
#include<cmath>
#include<string>
usingnamespacestd;
//策略模式:策略模式针对一组算法,将每一个算法封装到具有共同接口的独立的类中,
//从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下
//发生变化。策略模把行为和环境分开。环境类负责维持和查询行为类,
//各种算法在具体的策略类中提供。由于算法和环境独立开来,算法的增减,
//修改都不会影响到环境和客户端。
//
//跟不同类型的MM约会,要用不同的策略,有的请电影比较好,
//有的则去吃小吃效果不错,有的去海边浪漫最合适,但目的都是为了得到MM的芳心,
//我的追MM锦囊中有好多Strategy哦。
//策略的抽象类,接口,抽象类的指针可以访问所有子类对象,(纯虚函数)
//实现的各种策略,各种策略的实现类,都必须继承抽象类
//策略的设置接口类,设置不同策略
//收钱的抽象类,也就是策略的抽象类
classCashSuper
{
public:
//收钱的纯虚函数
virtualdoubleacceptMoney(doublemoney) = 0;
};
//正常收钱的策略
classCashNormal :publicCashSuper
{
public:
//正常收钱
doubleacceptMoney(doublemoney)
{
returnmoney;
}
};
//打折的策略
classCashRebate :publicCashSuper
{
private:
doublediscount;
public:
//折扣
CashRebate(doubledis)
{
discount =dis;
}
//收钱
doubleacceptMoney(doublemoney)
{
//折扣
returnmoney*discount;
}
};
//返现的策略
classCashReturn :publicCashSuper
{
private:
doublemoneyCondition;
doublemoneyReturn;
public:
//花多少钱,返回多少钱
CashReturn(doublemc,doublemr)
{
moneyCondition =mc;
moneyReturn =mr;
}
//收钱,返款
doubleacceptMoney(doublemoney)
{
doubleresult =money;
if (money >= moneyCondition)
{
result =money -floor(money / moneyCondition)*moneyReturn;
}
returnresult;
}
};
//策略的控制类
class CashContext
{
private:
CashSuper *cs;
public:
CashContext(stringstr)//设置策略
{
if (str == "正常收费")
{
cs =newCashNormal();
}
elseif (str == "打9折")
{
cs =newCashRebate(0.9);
}
elseif (str == "满1000送200")
{
cs =newCashReturn(1000, 200);
}
}
doublegetResult(doublemoney)
{
returncs->acceptMoney(money);
}
};
intmain()
{
doublemoney = 1000;
//可以改变下面括号中的值,如果是下面的的一句,运行结果是800
//CashContext *cc = new CashContext("满1000送200");
//若是下面这句,显示的是1000
//CashContext *cc = new CashContext("正常收费");
//下面的这句的意思是打九折,运行结果是:900
CashContext *cc = newCashContext("打9折");
cout <<cc->getResult(money);
cin.get();
return 0;
}
- 2.策略模式
- 2.策略模式
- 2.策略模式 Strategy
- 2.策略模式
- 设计模式--2.策略模式
- 2.策略模式(下)
- 大话设计模式-2.策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- [HDU 4744 Starloop System] 最小费用可行流
- 反射修改VO属性值
- Oracle
- 呵呵
- HDOJ 题目3342Legal or Not(拓扑排序)
- 2.策略模式
- Factorial Power(阶乘最后非零位)
- Nginx隐藏index.php和Pathinfo模式配置例子
- magento block和reference
- 3.抽象工厂模式
- 机器学习中的相似性度量http://www.cnblogs.com/heaad/archive/2011/03/08/1977733.html
- ACE_TAO sequence<string> strList C++ 映射
- ubuntu编译skynet
- poj2187Beauty Contest 凸包最大距离