C++编程思想(卷二):设计模式:职责链模式
2009-12-11 11:11
405 查看
职责链模式-尝试采用一系列策略模式:
在职责链中,一个函数调用自身,调用函数的一个不同实现,如此反复直至达到某个终止条件。这个终止条件或者是已到达策略链的底部或者是成功找到一个策略。
本质是尝试多个解决方法直到找到一个起作用的方法。
例:
在职责链中,一个函数调用自身,调用函数的一个不同实现,如此反复直至达到某个终止条件。这个终止条件或者是已到达策略链的底部或者是成功找到一个策略。
本质是尝试多个解决方法直到找到一个起作用的方法。
例:
#include <iostream> #include <vector> #include "../purge.h" using namespace std; enum Answer { NO, YES }; class GimmeStrategy { public: virtual Answer canIHave() = 0; virtual ~GimmeStrategy() {} }; class AskMom : public GimmeStrategy { public: Answer canIHave() { cout << "Mooom? Can I have this?" << endl; return NO; } }; class AskDad : public GimmeStrategy { public: Answer canIHave() { cout << "Dad, I really need this!" << endl; return NO; } }; class AskGrandpa : public GimmeStrategy { public: Answer canIHave() { cout << "Grandpa, is it my birthday yet?" << endl; return NO; } }; class AskGrandma : public GimmeStrategy { public: Answer canIHave() { cout << "Grandma, I really love you!" << endl; return YES; } }; class Gimme : public GimmeStrategy { vector<GimmeStrategy*> chain; public: Gimme() { chain.push_back(new AskMom()); chain.push_back(new AskDad()); chain.push_back(new AskGrandpa()); chain.push_back(new AskGrandma()); } Answer canIHave() { vector<GimmeStrategy*>::iterator it = chain.begin(); while(it != chain.end()) if((*it++)->canIHave() == YES) return YES; // Reached end without success... cout << "Whiiiiinnne!" << endl; return NO; } ~Gimme() { purge(chain); } }; int main() { Gimme chain; chain.canIHave(); }
相关文章推荐
- C++编程思想(卷二):设计模式:代理模式
- C++编程思想(卷二):设计模式:状态模式
- C++编程思想(卷二):设计模式:适配器模式
- C++编程思想(卷二):设计模式:模板方法模式
- C++编程思想(卷二):设计模式(序)
- C++编程思想(卷二):设计模式:单件
- C++编程思想(卷二):设计模式:策略模式
- 设计思想学习—职责链模式
- C++编程思想(卷二):设计模式:命令模式
- Java设计模式中单一职责原则(SRP)介绍
- 设计模式之职责链模式
- 深入理解JavaScript系列(38):设计模式之职责链模式
- java设计模式思想
- 设计模式系列:单一职责原则
- 设计模式三之:单一职责原则
- 黑马程序员--01.JDK5部分新特性--01【静态导入】【可变参数数组】【享元设计模式的思想】
- <Java设计模式>---单一职责原则
- 解读设计模式--单一职责原则
- 设计模式六大原则(1):单一职责原则
- 云计算设计模式(六)——命令和查询职责分离(CQRS)模式