设计模式——策略模式(C++实现)

策略模式

           定义一系列的算法,把他们一个个封装起来,并且使它们可相互替换。本模式使得算法可独立于使用它的客户而变化。属于行为型模式。

适用场景

          1、许多相关的类仅仅是行为有异。“策略”提供了一种用多个行为中的一个行为来配置一个类的方法。
          2、需要使用一个算法的不同变体。例如,你可能会定义一些反映不同的空间 /时间权衡的算法。当这些变体实现为一个算法的类层次时,可以使用策略模式。
          3、 算法使用客户不应该知道的数据。可使用策略模式以避免暴露复杂的、与算法相关的数据结构。
          4、一个类定义了多种行为 , 并且这些行为在这个类的操作中以多个条件语句的形式出现。将相关的条件分支移入它们各自的 Strategy类中以代替这些条件语句。
 

采用菜鸟教程的例子,这里用C++实现

#include<iostream>

using namespace std;

//创建一个定义活动的Strategy的抽象接口
class Strategy
{
public:
	Strategy() {};
	virtual ~Strategy() {};
	virtual int doOperation(int num1, int num2)=0;
};

//创建一个实体活动的OperationAdd类
class OperationAdd:Strategy
{
public:
	OperationAdd() {};
	virtual ~OperationAdd() {};
	int doOperation(int num1, int num2) { return num1 + num2; };
};

//创建一个实体活动的OperationSubstract类
class OperationSubstract :Strategy
{
public:
	OperationSubstract() {};
	virtual ~OperationSubstract() {};
	int doOperation(int num1, int num2) { return num1 - num2; };
};

//创建一个实体活动的OperationMultiply类
class OperationMultiply :Strategy
{
public:
	OperationMultiply() {};
	virtual ~OperationMultiply() {};
	int doOperation(int num1, int num2) { return num1 * num2; };
};

//创建一个使用某种策略的Context类
class Context
{
public:
	Context(Strategy *strate) { mstrate = strate; };
	virtual ~Context() { delete mstrate; mstrate = NULL; };
	int executeStrategy(int num1, int num2) { return mstrate->doOperation(num1,num2); };
private:
	Strategy *mstrate;
};

int main()
{
	Context *c1 = new Context((Strategy*)new OperationAdd());
	Context *c2 = new Context((Strategy*)new OperationSubstract());
	Context *c3 = new Context((Strategy*)new OperationMultiply());

	cout << c1->executeStrategy(1, 2) << endl;
	cout << c2->executeStrategy(1, 2) << endl;
	cout << c3->executeStrategy(1, 2) << endl;

	delete c1;
	c1 = NULL;

	delete c2;
	c2 = NULL;

	delete c3;
	c3 = NULL;
	return 0;
}

在visual studio 2015上运行结果:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值