策略模式(Strategy)
来源:互联网 发布:mac给ios手机装 编辑:程序博客网 时间:2024/05/21 01:57
策略模式:它定义了算法家族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的可会。[DP]
- 策略模式是一种定义一系列算法的方法,从概念上来看,所有这些算法完成的都是相同的工作,只是实现不同,它可以以相同的方式调用所有的算法,减少了各种算法类与使用算法类之间的耦合[DPE]。
- 策略模式的Strategy类层次为Context定义了一系列的可供重用的算法或行为。继承有助于析取出这些算法中的公共功[DP]。
- 策略模式的优点简化了单元测试,因为每个算法都有自己的类,可以通过自己的接口单独测试[DPE]。
- 策略模式是用来封装算法的,但在实践中,我们发现可以用它来封装几乎任何类型的规则,只要在分析过程中听到需要在不同时间引用不同的业务规则,就可以考虑使用策略模式处理这种变化的可能性[DPE]。
#include<iostream>using namespace std;class Strategy{public: virtual void AlgorithmInterface() = 0;};class StrategyA :public Strategy{public: virtual void AlgorithmInterface(){ cout << "策略A" << endl; }};class StrategyB :public Strategy{public: virtual void AlgorithmInterface(){ cout << "策略B" << endl; }};class StrategyC :public Strategy{public: virtual void AlgorithmInterface(){ cout << "策略C" << endl; }};class Context{private: Strategy* strgy;public: Context(){ this->strgy = nullptr; } // + 工厂模式 每当增加一种新策略的时候还需要在改switch void selectsetStrategy(char c){ switch (c){ case 'A': this->strgy =new StrategyA; break; case 'B': this->strgy = new StrategyB; break; case 'C': this->strgy = new StrategyC; break; } } void ContextInterface(char c){ selectsetStrategy(c); strgy->AlgorithmInterface(); delete strgy; }};int main(){ Context context; context.ContextInterface('B'); context.ContextInterface('C'); context.ContextInterface('A'); return 0;}
0 0
- 策略(Strategy)模式
- Strategy(策略)模式
- 策略(Strategy)模式
- Strategy(策略模式)
- 策略模式(Strategy)
- 策略模式(Strategy)
- Strategy(策略模式)
- 策略模式(Strategy)
- 策略模式(Strategy)
- 策略(strategy)模式
- 策略模式(strategy)
- 策略(strategy)模式
- 策略模式(Strategy)
- 策略模式(Strategy)
- 策略模式(Strategy)
- 策略模式(Strategy)
- Strategy(策略模式)
- 策略(Strategy)模式
- 操作JSONObject中的某一个bean
- 白话经典算法系列之十五 “一步千里”之数组找数
- 第13章 线程安全与锁优化
- ORA-65096 invalid common user or role name
- 用第三方程序打开自己应用里的文档
- 策略模式(Strategy)
- C++四种类型转换
- NSOperation封装- 多任务下载
- Map、Set、List、Queue、Stack的特点与用法1
- 将内容追加到文件尾部-采用字符流的形式,将abc.txt中的内容更换为 好好学习,天天向上!
- UIWindow
- 磁盘 分区
- 复制一个文件
- 白话经典算法系列之十六 “基数排序”之数组中缺失的数字