设计模式---策略模式
来源:互联网 发布:网页设计软件 编辑:程序博客网 时间:2024/06/08 13:11
策略模式,它定义了算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的客户。
策略模式是一种定义一系列算法的方法,从概念上来看,所有这些算法完成的都是相同的工作,只是实现不同,它可以以相同的方式调用所有的算法,
减少了各种算法类与使用算法类之间的耦合。其优点还有,简化了单元测试,因为每个算法都有自己的类,可以通过自己的接口单独测试。
下面实例是简单工厂模式加策略模式
#include<iostream>
#include<stdio.h>
using namespace std;
class CashSuper
{
public:
virtual double acceptCash(double money) = 0;
};
class CashNormal:public CashSuper
{
public:
double acceptCash(double money)
{
return money;
}
};
class CashRebate:public CashSuper
{
private:
double zhe;
public:
CashRebate(double zhe)
{
this->zhe = zhe;
}
double acceptCash(double money)
{
return money * zhe;
}
};
class CashReturn:public CashSuper
{
private:
double cond;
double retu;
public:
CashReturn(double cond ,double retu)
{
this->cond = cond;
this->retu = retu;
}
double acceptCash(double money)
{
double result = money;
if(money > cond)
result = money - money/cond*retu ;
return result;
}
};
class CashContext
{
private:
CashSuper *cs;
public:
CashContext(int type)
{
switch(type)
{
case 1:
CashNormal *cs0;
cs0 = new CashNormal();
cs = cs0;
break;
case 2:
CashReturn *cs1;
cs1= new CashReturn(300,100);
cs = cs1;
break;
case 3:
CashRebate *cs2;
cs2= new CashRebate(0.8);
cs = cs2;
break;
default:
break;
}
}
double GetResult(double money)
{
return cs->acceptCash(money);
}
};
int main()
{
CashContext *csuper = new CashContext(1);
double totalprice = csuper->GetResult(10*28);
cout<<"1--price="<<totalprice<<endl;
csuper = new CashContext(2);
totalprice = csuper->GetResult(10*38);
cout<<"2--price="<<totalprice<<endl;
csuper = new CashContext(3);
totalprice = csuper->GetResult(10*28);
cout<<"3--price="<<totalprice<<endl;
}
阅读全文
0 0
- 设计模式-策略模式
- 设计模式:策略模式
- 设计模式-策略模式
- 设计模式 - 策略模式
- 设计模式-策略模式
- 设计模式-----策略模式
- 设计模式 策略模式
- 设计模式-策略模式
- 设计模式-【策略模式】
- 设计模式-----策略模式
- 设计模式-策略模式
- 设计模式--策略模式
- 设计模式- 策略模式
- 设计模式- 策略模式
- 设计模式------策略模式
- 设计模式--策略模式
- 设计模式-策略模式
- 设计模式--策略模式
- 345. Reverse Vowels of a String
- 树形DP(HDU4616)
- Mysql写入数据的错误,很容易忽视掉!
- [bzoj4930][SDOI省队集训2017]棋盘
- XML 及其解析
- 设计模式---策略模式
- mysql数据库导入和导出
- 怎么将硬盘GPT分区转换为MBR分区模式
- PHP正则表达式
- 自定义广播
- Eclipse常用设置
- 免费的论文查重网站
- Java程序性能优化
- 微信小程序wxss border及border-radius属性