策略模式
来源:互联网 发布:齐天大圣 知乎 编辑:程序博客网 时间:2024/05/21 08:47
一、策略模式的定义:
策略模式定义了一组算法,把其中的每个算法分别封装起来,并且使他们之间可以互换。策略模式使用的就是面向对象的继承和多态机制。
二、策略模式的组成部分:
1、一个抽象类,它是算法或策略的抽象,它定义的每个策略必须实现的方法和属性。
2、具体的实现类,就是具体的策略,根据具体情况有不同的实现,每个类的内部实现差别可能很大。
2、一个封装角色,可以做它为调度类,起承上启下的的作用,它屏蔽高层对策略的直访问,封装可能存在的变化。
三、接下来看一下代码示例:
#include <iostream>using namespace std;class Strategy //定义一个抽象的策略角色{public:virtual void show() = 0;};class A : public Strategy //具体的策略角色A{public:void show(){cout<<"我是策略A\n";}};class B :public Strategy //具体的策略B{public:void show(){cout<<"我是策略B\n";}};class C :public Strategy//具体的策略C{public:void show(){cout<<"我是策略C\n";}}; class Context //封装角色{private:Strategy *StrategyChild;public:Context(Strategy *child){StrategyChild = child;}void display(){StrategyChild->show();}};void main(){Context *ContextA = new Context(new A); //调用角色AContextA->display();Context *ContextB = new Context(new B); //调用角色BContextB->display();Context *ContextC = new Context(new C); //调用角色CContextC->display();system("pause");}看一下执行结果
四、策略模式的优点:
1、算法可以自由切换,只要实现了抽象策略,它就是策略家族的一员,通过封装角色对其进行封装,保证对外提供”可自由切换“的策略。
2、避免使用多重条件判断,是系统更加灵活,并且易于扩展。
既然有优点,当然缺点也少不了:
1、每一个策略都是一个类,复用的可能性小,当策略众多时,类数量也是巨大的。
2、所有策略都必须对外暴漏,上层模块必须知道有哪些策略存在,才能知道,自己可以执行哪个策略,这与迪米特法则相违背。
五、策略模式的使用场景
1、多个类只在算法和行为上稍有不同的场景
2、算法需要自由切换的场景
3、需要屏蔽算法规则的场景
0 0
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 程序员必看的书之iOS程序员
- 与Ajax的初次谋面
- 设计模式------抽象工厂模式(AbstractFactoryPattern)
- 数据类型
- 44 c++ m面向对象版表达式计算器 设计缺陷
- 策略模式
- OPENCV回调函数
- CSS自适应布局(左右固定 中间自适应或者右侧固定 左侧自适应)
- 23读取联系人移植到项目中
- 运用指针,调用函数来是3个数从大到小输出(通过异或来交换大小)
- UIView获取屏幕Screen中的坐标位置
- GUI 匿名类
- pat字符串-02
- 深度学习BP算法的推导(附加RNN,LSTM的推导说明)