设计模式C++描述----15.策略(Strategy)模式

一. 举例说明

以前做了一个程序,程序的功能是评价几种加密算法时间,程序的使用操作不怎么变,变的是选用各种算法。

结构如下:


Algorithm:抽象类,提供算法的公共接口。

RSA_Algorithm:具体的RSA算法。

DES_Algorithm:具体的DES算法。

BASE64_Algorithm:具体的Base64算法。

在使用过程中,我只需要对外公布Algorithm_Context这个类及接口即可。

代码实现:

//策略类
class Algorithm  
{
public:
	virtual void calculate() = 0;  
};

//具体RSA算法
class RSA_Algorithm : public Algorithm  
{  
public:  
	void calculate() { cout<<"RSA algorithm..."<<endl; }  
};  

//具体DES算法
class DES_Algorithm : public Algorithm  
{  
public:  
	void calculate() { cout<<"DES algorithm..."<<endl; }  
};

//具体Base64算法
class BASE64_Algorithm: public Algorithm  
{  
public:
	void calculate() { cout<<"Base64 algorithm..."<<endl; }  
}; 

//策略上下文
class Algorithm_Context
{
private:
	Algorithm *m_ra;

public:
	Algorithm_Context(Algorithm *ra) { m_ra = ra; }
	~Algorithm_Context() { delete m_ra; }
	
	void calculate() { m_ra->calculate(); }
};

//测试代码
int main()
{
	Algorithm_Context context(new RSA_Algorithm()); //使用具体算法
	
	context.calculate();
	
	return 0;  
}  

一. 策略模式

定义:它定义了算法家族,分别封装起来,让它们之间可以互相替换,此算法的变化,不会影响到使用算法的客户


这里的关键就是将算法的逻辑抽象接口(DoAction)封装到一个类中(Context),再通过委托的方式将具体的算法实现委托给具体的 Strategy 类来实现(ConcreteStrategeA类)。
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值