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

来源:互联网 发布:在线充值系统网站源码 编辑:程序博客网 时间:2024/06/11 19:55

一. 举例说明

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

结构如下:


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类)。
原创粉丝点击