45 lines
1008 B
C++
45 lines
1008 B
C++
/**
|
|
* @name 责任链模式
|
|
* @brief: 使多个对象都有机会处理请求
|
|
* @note 场景:日志过滤系统、审批流程、异常处理链
|
|
*/
|
|
|
|
class Handler {
|
|
public:
|
|
virtual void handleRequest(int level) = 0;
|
|
void setNext(Handler* h) { next = h; }
|
|
protected:
|
|
Handler* next = nullptr;
|
|
};
|
|
|
|
class Manager : public Handler {
|
|
public:
|
|
void handleRequest(int level) override {
|
|
if (level <= 5) {
|
|
// 处理请求
|
|
} else if (next) {
|
|
next->handleRequest(level);
|
|
}
|
|
}
|
|
};
|
|
|
|
class Director : public Handler {
|
|
void handleRequest(int level) override {
|
|
if (level > 5 && level <= 10) {
|
|
// 处理请求
|
|
} else if (next) {
|
|
next->handleRequest(level);
|
|
}
|
|
}
|
|
};
|
|
|
|
// 使用
|
|
int main()
|
|
{
|
|
Handler* manager = new Manager();
|
|
Handler* director = new Director();
|
|
manager->setNext(director);
|
|
|
|
manager->handleRequest(3); // Manager处理
|
|
manager->handleRequest(7); // Director处理
|
|
} |