行为型模式之Chain of Responsibility模式(二)

2014-11-24 00:56:16 · 作者: · 浏览: 9
}
}
virtual bool handle_request_impl(int cmd) = 0;
public void set_successor(Handler* successor)
{
m_successor = successor;
}
private:
Handler* m_successor;
};
class ConcreteHandler1 : public Handler {
public:
bool handle_request_impl(int cmd) {
if (cmd <= COMMAND_1 || cmd == COMMAND_3) {
perform1.action();
return true ;
}
return false ;
}
};
class ConcreteHandler2 : public Handler {
public:
bool handle_request_impl(int cmd) {
if (cmd <= COMMAND_5 || cmd == COMMAND_7) {
perform2.action();
return true ;
}
return false ;
}
};
class ConcreteHandler3 : public Handler {
public:
bool handle_request_impl(int cmd) {
if (cmd <= COMMAND_9) {
perform3.action();
return true ;
}
return false ;
}
};
应用
除了以上示例中的例子,实际应用中有时还希望一个请求可能被多个Handler处理的情况,针对这种情况其实只要稍微修改下代码,控制handle_request_impl的返回值就可以做到。另外,如果不需要由调用方来调用set_successor组成职责链,那么甚至可以在每创建一个Handler时自动进入职责链,从而把set_successor的细节也隐藏掉,如何实现的话,自己尝试吧。