C++设计模式实现--策略(Strategy)模式
2023-09-27 14:27:22 时间
版权声明:本文为博主原创文章,未经博主同意不得转载。 https://blog.csdn.net/L_Andy/article/details/30489331
一. 举例说明
曾经做了一个程序,程序的功能是评价几种加密算法时间。程序的使用操作不怎么变,变的是选用各种算法。
结构例如以下:
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类)。
策略模式是一种定义一系列算法的方法,从概念上来看。全部这些算法完毕的都是同样的工作,仅仅是实现不同,它能够以同样
的方式调用全部的算法。降低了各种算法类与使用算法类之间的耦合。
策略模式的长处是简化了单元測试,由于每一个算法都有自己的类,能够通过自己的接口单独測试。
策略模式就是用来封装算法的,但在实践中,我们发现能够用它来封装差点儿不论什么类型的规则。仅仅要在分析过程中听到须要在不同实践应用不同
的业务规则,就能够考虑使用策略模式处理这样的变化的可能性。
相关文章
- 【C/C++开发】内存对齐(内存中的数据对齐)、大端模式及小端模式
- Python、R、Java、 C++ 等:从业界反馈看机器学习语言趋势
- C/C++趣味程序设计百例(41~50)
- .pgr照片文件解析,C++与Java存储数据差别大小端模式
- 学习日记之命令模式和Effective C++
- C++中的单例模式
- VC++中字符串格式转换
- C++的一种业务分发方案(另类的工厂模式)
- 设计模式C++实现——适配器模式
- C++的单例模式
- Gamma原理及快速实现算法(C/C++)(转)
- C++模板类中使用静态成员变量(例如Singleton模式)
- 设计模式C++学习笔记之十六(Observer观察者模式)
- 设计模式C++学习笔记之十一(Bridge桥梁模式)
- 设计模式C++学习笔记之十(Builder建造者模式)
- 设计模式C++学习笔记之八(Adapter适配器模式)
- 设计模式C++学习笔记之四(Multition多例模式)
- 设计模式C++学习笔记之一(Strategy策略模式)
- 32位模式下C/C++程序可用最大内存
- C++ | 简单工厂模式 | 复数计算器