1 Chain of Responsibility

Davids 2025-08-10 05:09:12
Categories: > > Tags:

责任链模式:
一个请求可能被多个对象处理,但是每个请求在运行时只能有一个接收者。
让接收者在运行时自行决定谁来处理,从而使得解耦。
使多个对象都有机会处理请求,将这些对象链起来,并沿着链传递请求,直到有一个对象处理它。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class ChainHandler {
private:
ChainHandler* m_Next;
protected:
virtual bool CanHandle( const Request& request ) = 0;
virtual void Process( const Request& request ) = 0;
public:
ChainHandler() : m_Next(nullptr) {}
SetNextHandler(ChainHandler* next) { m_Next = next; }
void Handle( const Request& request )
{
// 沿着接收者链传递,直到有接收者可以处理。
if (CanHandle(request))
Process(request);
else
m_Next->Handle(request);
}
}