
C责任链模式请求处理责任链模式将请求沿着处理器链传递直到某个处理器处理它。这种模式解耦了请求发送者和接收者适合日志记录、权限验证和事件过滤。责任链包含处理器接口和具体处理器实现。#include#include#include#includeclass Request {std::string type_;std::string content_;int priority_;public:Request(const std::string type, const std::string content, int priority 0): type_(type), content_(content), priority_(priority) {}const std::string type() const { return type_; }const std::string content() const { return content_; }int priority() const { return priority_; }};class Handler {protected:std::unique_ptr next_;public:virtual ~Handler() default;Handler* set_next(std::unique_ptr handler) {next_ std::move(handler);return this;}virtual void handle(const Request request) {if (next_) {next_-handle(request);}}virtual bool can_handle(const Request request) const 0;};class LogHandler : public Handler {public:bool can_handle(const Request request) const override {return request.type() LOG;}void handle(const Request request) override {if (can_handle(request)) {std::cout [LOG] request.content() \n;} else {Handler::handle(request);}}};class AuthHandler : public Handler {public:bool can_handle(const Request request) const override {return request.type() AUTH;}void handle(const Request request) override {if (can_handle(request)) {std::cout [AUTH] Validating: request.content() \n;if (request.content().find(token) ! std::string::npos) {std::cout [AUTH] Access granted\n;} else {std::cout [AUTH] Access denied\n;}} else {Handler::handle(request);}}};class DataHandler : public Handler {public:bool can_handle(const Request request) const override {return request.type() DATA;}void handle(const Request request) override {if (can_handle(request)) {std::cout [DATA] Processing: request.content() \n;std::cout [DATA] Priority: request.priority() \n;} else {Handler::handle(request);}}};void chain_demo() {auto chain std::make_unique();chain-set_next(std::make_unique())-set_next(std::make_unique());Request r1(LOG, System startup);Request r2(AUTH, tokenabc123);Request r3(DATA, Important payload, 5);Request r4(UNKNOWN, Test request);chain-handle(r1);chain-handle(r2);chain-handle(r3);chain-handle(r4);}通用责任链使用std::function。class Filter {std::function predicate_;std::function action_;std::unique_ptr next_;public:Filter(std::function pred,std::function action): predicate_(std::move(pred)), action_(std::move(action)) {}Filter* set_next(std::unique_ptr next) {next_ std::move(next);return this;}void process(const std::string data) {if (predicate_(data)) {action_(data);} else if (next_) {next_-process(data);} else {std::cout No handler for: data \n;}}};void functional_chain_demo() {auto chain std::make_unique([](const std::string s) { return s.find(ERROR) ! std::string::npos; },[](const std::string s) { std::cout Error handler: s \n; });chain-set_next(std::make_unique([](const std::string s) { return s.find(WARN) ! std::string::npos; },[](const std::string s) { std::cout Warning handler: s \n; }))-set_next(std::make_unique([](const std::string s) { return s.find(INFO) ! std::string::npos; },[](const std::string s) { std::cout Info handler: s \n; }));chain-process(ERROR: Connection failed);chain-process(WARN: Low memory);chain-process(INFO: User logged in);chain-process(DEBUG: Variable value);}责任链模式适合处理多层次、可动态配置的请求处理场景。