您的位置:首页 > 其它

设计模式---策略模式 实例

2015-05-14 14:21 302 查看
策略模式将算法封装到一个类里面,通过组合的方式将具体算法的实现在组合对象中实现,再通过委托的方式将抽象接口的实现委托给组合对象实现

将算法的逻辑抽象接口封装到一个类中,再通过委托的方式将具体的算法实现委托给具体的策略类来实现。

代码实例:

#include <iostream>

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 rebate;

public:

cashRebate(double money_rebate)

{

rebate = money_rebate;

}

double acceptCash(double money)

{

/* double rebate;

cout<<"please input rebate: ";

cin>>rebate; */

return money * rebate;

}

};

返钱收费类:

class cashReturn : public cashSuper

{

private:

double moneyCondition;

double moneyReturn;

public:

cashReturn(double Condition, double Return)

{

moneyCondition = Condition;

moneyReturn = Return;

}

double acceptCash(double money)

{

double result;

result = money - int(money/moneyCondition) * moneyReturn;

return result;

}

};

策略类:

class cashContext

{

private:

cashSuper *m_cs;

public:

cashContext(cashSuper *cs)

{

m_cs = cs;

}

~cashContext()

{

delete m_cs;

}

double getResult(double money)

{

return m_cs->acceptCash(money);//一定记着不能用m_cs.acceptCash(money)

}

};

int main()

{

//正常收费

double money = 500;

/*

cashContext cashContext(new cashNormal());

double normal = cashContext.getResult(money);

cout<<"正常收费: \n"<<normal<<"\n";

cashContext cashContext(new cashRebate(0.5));

double result = cashContext.getResult(money);

cout<<"打折收费: \n"<<result<<"\n";

*/

cashContext cashContext(new cashReturn(500, 30));

double result = cashContext.getResult(money);

cout<<"返钱收费: \n"<<result<<"\n";

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: