河南省商丘网站,网软志成企业网站管理系统,wordpress制作企业网站,wordpress博客主题源码模式定义
责任链模式#xff08;Chain of Responsibility Pattern#xff09;是一种行为型设计模式#xff0c;允许多个对象按链式顺序处理请求#xff0c;直到其中一个对象处理为止。该模式将请求的发送者和接收者解耦#xff0c;使多个对象都有机会处理请求。 模式结构…模式定义
责任链模式Chain of Responsibility Pattern是一种行为型设计模式允许多个对象按链式顺序处理请求直到其中一个对象处理为止。该模式将请求的发送者和接收者解耦使多个对象都有机会处理请求。 模式结构
抽象处理者Handler
定义处理请求的接口如 handleRequest()持有下一个处理者的引用nextHandler 具体处理者ConcreteHandler实现请求处理逻辑决定是否处理或传递请求 客户端Client构建处理链并触发请求 适用场景
多级处理逻辑数控系统中需要依次执行安全检查、参数校验、运动控制等步骤 动态调整处理流程运行时灵活调整处理链顺序如紧急任务跳过某些校验 解耦请求与处理者避免请求发送者依赖具体处理对象 C示例数控系统场景
场景说明 数控系统执行加工任务时需依次通过安全检查、参数校验、运动控制三个环节任一环节失败则终止流程。
#include
#include // 请求类加工任务
class MachiningRequest {
public:MachiningRequest(int speed, float depth) : speed_(speed), depth_(depth), isSafe_(false), isValid_(false) {}int speed_;float depth_;bool isSafe_;bool isValid_;
};// 抽象处理者
class Handler {
protected:Handler* nextHandler_;
public:Handler() : nextHandler_(nullptr) {}virtual ~Handler() default;void setNext(Handler* handler) { nextHandler_ handler; }virtual void handleRequest(MachiningRequest request) 0;
};// 具体处理者安全检查
class SafetyCheckHandler : public Handler {
public:void handleRequest(MachiningRequest request) override {if (request.speed_ 5000 request.depth_ 100.0f) {request.isSafe_ true;std::cout 安全检查通过 std::endl;if (nextHandler_) nextHandler_-handleRequest(request);} else {std::cout 安全校验失败参数超限 std::endl;}}
};// 具体处理者参数校验
class ParameterValidator : public Handler {
public:void handleRequest(MachiningRequest request) override {if (request.speed_ 0 request.depth_ 0) {request.isValid_ true;std::cout 参数校验通过 std::endl;if (nextHandler_) nextHandler_-handleRequest(request);} else {std::cout 参数校验失败非法数值 std::endl;}}
};// 具体处理者运动控制
class MotionController : public Handler {
public:void handleRequest(MachiningRequest request) override {if (request.isSafe_ request.isValid_) {std::cout 运动控制执行速度 request.speed_ rpm深度 request.depth_ mm std::endl;}}
};int main() {// 构建处理链Handler* safetyCheck new SafetyCheckHandler();Handler* validator new ParameterValidator();Handler* motionCtrl new MotionController();safetyCheck-setNext(validator);validator-setNext(motionCtrl);// 触发请求MachiningRequest task1(2500, 50.0f);std::cout --- 任务1执行 --- std::endl;safetyCheck-handleRequest(task1);MachiningRequest task2(6000, 150.0f);std::cout \n--- 任务2执行 --- std::endl;safetyCheck-handleRequest(task2);delete safetyCheck;delete validator;delete motionCtrl;return 0;
}输出结果
--- 任务1执行 ---
安全检查通过
参数校验通过
运动控制执行速度2500rpm深度50mm--- 任务2执行 ---
安全校验失败参数超限实现要点
链式传递每个处理者通过 nextHandler_ 传递请求形成处理链[ 动态扩展新增处理步骤如日志记录只需添加新 ConcreteHandler 终止条件处理者根据业务逻辑决定是否中断链如安全检查失败 模式变体
纯责任链请求必须被严格处理或传递如审批流程 带中断的链处理完成后可终止传递如本示例的安全检查 优先级链按优先级动态排序处理者如紧急任务优先处理