设计模式笔记之---策略模式
2012-09-24 14:51
288 查看
策略模式(Strategy):定义了一系列的算法,将它们分别封装起来,让它们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的客户端。
策略模式的主要目的是将算法的定义和使用分开,具体算法的定义放在专门的策略类中,每一种策略封装了一种实现算法,使用算法的环境类针对抽象策略(接口)进行编程,遵循了“依赖倒转原则”。由于算法和环境独立开来,减少了各种算法类和使用算法类之间的耦合。
UML类图:
策略模式基本代码如下:
客户端调用代码如下:
运行结果如下:
*************************************
firehood 学设计模式之---策略模式
*************************************
执行策略A
执行策略B
请按任意键继续. . .
策略模式的主要目的是将算法的定义和使用分开,具体算法的定义放在专门的策略类中,每一种策略封装了一种实现算法,使用算法的环境类针对抽象策略(接口)进行编程,遵循了“依赖倒转原则”。由于算法和环境独立开来,减少了各种算法类和使用算法类之间的耦合。
UML类图:
策略模式基本代码如下:
/******************************************************************** filename: Strategy.h created: 2012-09-24 author: firehood purpose: firehood 学设计模式之---策略模式 *********************************************************************/ #pragma once #include <iostream> using namespace std; // 抽象策略 class Strategy { public: Strategy(void){} virtual ~Strategy(void){} virtual void execute() = 0; }; // 具体策略A class ConcreteStrategyA : public Strategy { public: ConcreteStrategyA(void){} virtual ~ConcreteStrategyA(void){} virtual void execute() { cout<<"执行策略A"<<endl; } }; // 具体策略B class ConcreteStrategyB : public Strategy { public: ConcreteStrategyB(void){} virtual ~ConcreteStrategyB(void){} virtual void execute() { cout<<"执行策略B"<<endl; } }; // 上下文 class Context { public: Context(Strategy* pStrategy):m_pStrategy(NULL) { m_pStrategy = pStrategy; } virtual ~Context() { if(m_pStrategy) { delete m_pStrategy; m_pStrategy = NULL; } } // 上下文接口 void ContextInterface() { if(m_pStrategy != NULL) m_pStrategy->execute(); } private: Strategy* m_pStrategy; };
客户端调用代码如下:
#include "Strategy.h" #include <iostream> using namespace std; int main(int argc,char* argv[]) { cout<<"*************************************"<<endl; cout<<"firehood 学设计模式之---策略模式"<<endl; cout<<"*************************************"<<endl; Context *pContext = NULL; pContext = new Context(new ConcreteStrategyA()); pContext->ContextInterface(); delete pContext; pContext = new Context(new ConcreteStrategyB()); pContext->ContextInterface(); delete pContext; system("pause"); return 0; }
运行结果如下:
*************************************
firehood 学设计模式之---策略模式
*************************************
执行策略A
执行策略B
请按任意键继续. . .
相关文章推荐
- Head First设计模式笔记之(策略模式)
- 设计模式学习笔记2-----策略模式
- Head First 设计模式(1)- 策略模式 笔记
- 设计模式学习笔记--策略(Strategy)模式
- 设计模式学习笔记--Strategy 策略模式
- 设计模式笔记1:策略模式(Strategy pattern)
- PHP 设计模式 笔记与总结(8)策略模式
- 设计模式笔记二十三:策略模式
- OPENCV学习笔记3-1_算法设计中使用策略模式
- 设计模式学习笔记(六)之策略模式(Strategy)
- 设计模式之禅笔记-策略模式
- 设计模式学习笔记(四:策略模式)
- Java-马士兵设计模式学习笔记-策略模式-模拟Comparable接口
- 再起航,我的学习笔记之JavaScript设计模式20(策略模式)
- 设计模式之策略模式(笔记)
- 设计模式笔记——策略模式
- 设计模式学习笔记——策略模式
- 设计模式学习笔记(六)之策略模式(Strategy)
- Android设计模式学习笔记(策略模式)
- 设计模式学习笔记(1):策略模式