C++实现策略模式
来源:互联网 发布:怎样做一个绅士知乎 编辑:程序博客网 时间:2024/05/16 05:29
1.定义
策略模式是指定义一系列的算法,把每一个算法封装起来,使他们可以相互替换,使得算法可以独立于使用它的客户而变化。
2. 组成
环境类(Context): 内部维护一个Strategy对象的引用,对外提供相应功能接口;
策略类(Strategy): 定义算法的一个或多个接口;
具体策略类(ConcreteStrategy): 以Strategy接口实现某个特定算法;
3. 类关系图
4. 效果
优点:策略模式把算法进行归纳,使得算法的切换、扩展更加容易。
缺点:策略使用者需要了解各个具体策略,使得整个模式的封装性不强。
5.C++实现
实现策略模式时,需要注意的是算法接口的定义。如果能把算法运行所需信息提供完整,避免算法类访问Context,则可减少Context与Strategy之间的耦合。
/*******************//* Strategy.h *//*******************/#ifndef __STRATEGY_H__#define __STRATEGY_H__class Strategy{public:virtual void AlgorithmFunction() = 0;};class ConcreteStrategyA : public Strategy{public:void AlgorithmFunction();};class ConcreteStrategyB : public Strategy{public:void AlgorithmFunction();};class ConcreteStrategyC : public Strategy{public:void AlgorithmFunction();};#endif //__STATEGY_H__
/********************//* Strategy.cpp *//********************/#include "Strategy.h"#include <stdio.h>void ConcreteStrategyA::AlgorithmFunction(){printf("我是一只策略A,咿呀咿呀哟~""\n");}void ConcreteStrategyB::AlgorithmFunction(){printf("天空一声巨响,策略B闪亮登场~""\n");}void ConcreteStrategyC::AlgorithmFunction(){printf("策略C低调撸过…""\n");}
/******************//* Context.h *//******************/#ifndef __CONTEXT_H__#define __CONTEXT_H__#include "Strategy.h"enum enum_StrategyName{enum_val_StrategyA,enum_val_StrategyB,enum_val_StrategyC};class Context{public:Context(enum_StrategyName strategyName = enum_val_StrategyA);void SetStrategy(enum_StrategyName strategyName);void WorkFunction();private:Strategy * m_pStrategy;};#endif //__CONTEXT_H__
/*******************//* Context.cpp *//*******************/#include "Context.h"Context::Context(enum_StrategyName strategyName/* = enum_val_StrategyA*/){switch(strategyName){case enum_val_StrategyA:m_pStrategy = new ConcreteStrategyA();break;case enum_val_StrategyB:m_pStrategy = new ConcreteStrategyB();break;case enum_val_StrategyC:m_pStrategy = new ConcreteStrategyC();break;default:m_pStrategy = new ConcreteStrategyA();}}void Context::WorkFunction(){m_pStrategy->AlgorithmFunction();}
/*********************//* Main.cpp *//*********************/#include "Context.h"#include <stdio.h>#include <conio.h>int main(int argc, char * argv[]){Context * pContextA = new Context(enum_val_StrategyA);Context * pContextB = new Context(enum_val_StrategyB);Context * pContextC = new Context(enum_val_StrategyC);pContextA->WorkFunction();pContextB->WorkFunction();pContextC->WorkFunction();delete pContextA;delete pContextB;delete pContextC;printf("\n""按下任意键继续…""\n");_getch();return 0;}
运行截图:
=========================End===================================
0 0
- 策略模式C语言实现
- 策略模式(c++)
- 策略模式(C语言版)
- 【C++】Chapter2:策略模式
- Objective C--策略模式
- Objective C 策略模式
- Objective C--策略模式
- 策略模式(c++)
- object-c 策略模式
- 策略(Strategy)模式(C#实现版本)
- 利用C语言中的回调函数实现策略模式
- 策略模式的实现
- 策略模式C++实现
- 策略模式的实现
- 策略模式实现
- c++ 实现策略模式
- 策略模式c++实现
- JS实现策略模式
- solr-spellcheck
- 关于cocos2dx中的中文
- 一些关于Struts的面试题
- 程序性能分析工具 grof
- ado.net将数据库连接字符串放入配置文件中
- C++实现策略模式
- MongoDB条件大量删除操作
- GNU ARM汇编伪操作(Directives) 命令集
- 淡淡的忧伤
- LCD接口简介
- 在eclipse里就能查看所有手机屏幕上布局样式
- 《从程序员到项目经理》读书笔记(十):每个人都是管理者
- 命名空间
- Ubuntu 终端里打开 pdf 命令