策略模式,就提供一系列应对不同情况的策略算法封装供使用对象选择实施。比如商场针对不同节日的打折方案,疫情针对不同风险区域的管控措施等这些我们可以看成是不同情况的策略算法,我们都可以提供一个统一的策略类接口以应对不同情况策略的选择。
这样做的优点在于不同策略算法切换方便,同时避免了同时使用多重条件判断而且易于扩展;缺点就是对于使用者需清楚策略算法以便其选择,另外就是当策略算法增加时策略类会较多从而使代码更加臃肿。
策略模式的UML简图:
下面我们就通过一个简单的事例代码来具体了解我们的策略模式:
1. 抽象策略类(对应UML图中的AbstractStrategy类)及其子类(具体策略类)的定义;
2. 策略选择类(对应UML图中的Context类):
3. 主函数测试代码:
4. 编译运行结果:
其实对于策略模式这里主要就策略抽象类和选择策略的对象类这两个类,其余具体的策略算法都是基于策略抽象类的扩展类,如代码里的低中高3个风险策略类。
注:这里为了方便大家对该设计模式结构的理解,故并没将类的定义与其接口定义分开(采用头文件与源文件的形式),大家在工程中实际使用时应当分开。