23.职责链模式--Chain of Responsibility
2014-07-18 00:56
288 查看
原文地址:/article/7840313.html
Chain of Responsibility模式:
Chain of Responsibility模式使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这个对象连成一条链,并沿着这条链传递该请求,知道有一个对象处理它为止。
当客户提交一个请求时,请求时沿链传递直至有一个ConcreteHandler对象负责处理它。这就使得接收者和发送者都没有对方的明确信息,且链中的对象自己也并不知道链的结构。结果是职责链可简化对象的相互连接,它们仅需保持一个指向其后继者的引用,而不需要保持它所有的候选接收者的引用,这也就大大降低了耦合度了。对于客户端来说,可以随时的增加或修改处理一个请求的结构,增强了给对象指派职责的灵活性。
Chain of Responsibility模式典型的结构图为:
Chain of Responsibility模式的实现代码如下:
Chain of Responsibility模式:
Chain of Responsibility模式使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这个对象连成一条链,并沿着这条链传递该请求,知道有一个对象处理它为止。
当客户提交一个请求时,请求时沿链传递直至有一个ConcreteHandler对象负责处理它。这就使得接收者和发送者都没有对方的明确信息,且链中的对象自己也并不知道链的结构。结果是职责链可简化对象的相互连接,它们仅需保持一个指向其后继者的引用,而不需要保持它所有的候选接收者的引用,这也就大大降低了耦合度了。对于客户端来说,可以随时的增加或修改处理一个请求的结构,增强了给对象指派职责的灵活性。
Chain of Responsibility模式典型的结构图为:
Chain of Responsibility模式的实现代码如下:
//Handle.h #ifndef _HANDLE_H_ #define _HANDLE_H_ class Handle { public: virtual ~Handle(); virtual void HandleRequest() = 0; void SetSuccessor(Handle* succ); Handle* GetSuccessor(); protected: Handle(); Handle(Handle* succ); private: Handle* _succ; }; class ConcreteHandleA:public Handle { public: ConcreteHandleA(); ~ConcreteHandleA(); ConcreteHandleA(Handle* succ); void HandleRequest(); protected: private: }; //Handle.cpp #include "Handle.h" #include <iostream> using namespace std; Handle::Handle() { _succ = 0; } Handle::~Handle() { delete _succ; } Handle::Handle(Handle* succ) { this->_succ = succ; } void Handle::SetSuccessor(Handle* succ) { _succ = succ; } Handle* Handle::GetSuccessor() { return _succ; } void Handle::HandleRequest() { } ConcreteHandleA::ConcreteHandleA() { } ConcreteHandleA::ConcreteHandleA(Handle* succ):Handle(succ) { } ConcreteHandleA::~ConcreteHandleA() { } void ConcreteHandleA::HandleRequest() { if (this->GetSuccessor() != 0) { cout<<"ConcreteHandleA 我把处理权给后继节点....."<<endl; this->GetSuccessor()->HandleRequest(); } else { cout<<"ConcreteHandleA 没有后继了,我必须自己处理...."<<endl; } } ConcreteHandleB::ConcreteHandleB() { } ConcreteHandleB::ConcreteHandleB(Handle* succ):Handle(succ) { } ConcreteHandleB::~ConcreteHandleB() { } void ConcreteHandleB::HandleRequest() { if (this->GetSuccessor() != 0) { cout<<"ConcreteHandleB 我把处理权给后继节点....."<<endl; this->GetSuccessor()->HandleRequest(); } else { cout<<"ConcreteHandleB 没有后继了,我必须自己处理...."<<endl; } } //main.cpp #include "Handle.h" #include <iostream> using namespace std; int main(int argc,char* argv[]) { Handle* h1 = new ConcreteHandleA(); Handle* h2 = new ConcreteHandleB(); h1->SetSuccessor(h2); h1->HandleRequest(); return 0; }
相关文章推荐
- .NET设计模式(23): 职责链模式(Chain of Responsibility Pattern)
- php设计模式 Chain Of Responsibility (职责链模式)
- 职责链模式(Chain Of Responsibility Pattern)
- 职责链模式(Chain of Responsibility Pattern)
- 设计模式14:Chain of Responsibility Pattern (职责链模式)
- Java模式 - Chain of Responsibility(职责链模式)
- 职责链模式(Chain of Responsibility Pattern)
- JAVA设计模式十一--Chain of Responsibility(职责链模式)
- 职责链模式(Chain of Responsibility Pattern)
- 职责链模式(Chain of Responsibility Pattern)
- 设计模式笔记18:职责链模式(Chain of Responsibility Pattern)
- 15.Javascript设计模式之职责链模式----Chain of Responsibility
- 步步为营 .NET 设计模式学习笔记 十九、Chain of Responsibility(职责链模式)
- 设计模式袖珍版 连续转载之 - Chain of Responsibility(职责链)
- 设计模式——职责链你模式(Chain of Responsibility)
- php设计模式 Chain Of Responsibility (职责链模式)
- Chain Of Responsibility 职责链模式
- 步步为营 .NET 设计模式学习笔记 十九、Chain of Responsibility(职责链模式)
- 职责链模式(Chain of Responsibility Pattern)
- 设计模式笔记18:职责链模式(Chain of Responsibility Pattern)