策略模式
2010-06-09 12:21
295 查看
在工作中老是看到一大串的 switch,if…else语句,这样的程序分支太多,可谓是丑陋的代码。用策略模式可以部分解决这种问题。我们定义一系列的策略,这样就可以根据客户改变策略。比如做网络协议的时候,客户有自己的协议,我们只需把客户的协议封装好,替换原有的策略,也就是原来的协议就好了,而不用大量的switch判断。
结构图:
示例代码:
在网络编程时,多协议的封装;做算法时,不同算法的封装都可以使用策略模式。把“坏味道的代码”,重构成简洁可复用的代码。高内聚,低耦合。
结构图:
示例代码:
#ifndef _CONTEXT_H #define _CONTEXT_H #include "Strategy.h" class Context { private: StrategyInterface *_strategy; public: Context(StrategyInterface *strategy):_strategy(strategy) { } void set_strategy(StrategyInterface *strategy) { _strategy = strategy; } void execute() { _strategy->execute(); } }; #endif
#ifndef _STRATEGY_H #define _STRATEGY_H class StrategyInterface { public: virtual void execute() = 0; }; #endif
#ifndef _CSTRATEGY_H #define _CSTRATEGY_H #include "Strategy.h" #include <iostream> using namespace std; class StrategyA: public StrategyInterface { public: virtual void execute() { cout << "Called StrategyA execute method" << endl; } }; class StrategyB: public StrategyInterface { public: virtual void execute() { cout << "Called StrategyB execute method" << endl; } }; class StrategyC: public StrategyInterface { public: virtual void execute() { cout << "Called StrategyC execute method" << endl; } }; #endif
#include "Context.h" #include "CStrategy.h" int main(int argc, char *argv[]) { StrategyA concreteStrategyA; StrategyB concreteStrategyB; StrategyC concreteStrategyC; Context contextA(&concreteStrategyA); Context contextB(&concreteStrategyB); Context contextC(&concreteStrategyC); contextA.execute(); contextB.execute(); contextC.execute(); contextA.set_strategy(&concreteStrategyB); contextA.execute(); contextA.set_strategy(&concreteStrategyC); contextA.execute(); system("pause"); return 0; }
在网络编程时,多协议的封装;做算法时,不同算法的封装都可以使用策略模式。把“坏味道的代码”,重构成简洁可复用的代码。高内聚,低耦合。
相关文章推荐
- java设计模式-策略模式
- 设计模式之策略模式(Strategy)&&Comparable、Comparator接口
- 策略模式学习
- <Head First 设计模式>:策略模式--Duck
- Java设计模式学习之一---策略模式
- 设计模式:简单工厂与策略模式
- java设计模式之——策略模式
- 《大话设计模式》之--第2章 商场促销----策略模式
- 我读设计模式之策略模式(Strategy pattern)
- 【ThinkingInJava】10、完全解耦,策略设计模式
- 策略模式
- 设计模式-策略模式
- 重新认识策略模式---利用策略实现容错恢复机制
- 策略模式
- 策略模式
- Java设计模式透析之 —— 策略(Strategy)
- 设计模式之策略模式(Strategy)
- C++设计模式--Strategy策略模式
- 《JAVA与模式》系列十六:策略模式
- Java经典编程300例之实例064 策略模式的简单应用