当前位置: 首页 > news >正文

网站防盗链设置网站建设外包名词解释

网站防盗链设置,网站建设外包名词解释,网站用户群,佛山市企业网站建设平台责任链模式的动机与意图 动机#xff1a; 在软件开发中#xff0c;经常会遇到需要处理一系列请求或事件的情况。这些请求可能需要经过多个处理对象#xff0c;每个对象根据其职责决定是否处理请求或将其传递给下一个对象。责任链模式#xff08;Chain of Responsibility P…责任链模式的动机与意图 动机 在软件开发中经常会遇到需要处理一系列请求或事件的情况。这些请求可能需要经过多个处理对象每个对象根据其职责决定是否处理请求或将其传递给下一个对象。责任链模式Chain of Responsibility Pattern提供了一种将请求的发送者和接收者解耦的方式允许多个对象都有机会处理请求从而避免了请求发送者与接收者之间的紧密耦合。 意图 责任链模式的意图是使多个对象都有机会处理请求从而避免请求的发送者与接收者之间的耦合。将这些对象连成一条链并沿着这条链传递请求直到有对象处理它为止。 适用场合 多个对象可以处理同一请求但具体由哪个对象处理在运行时确定。需要在不明确指定接收者的情况下向多个对象中的一个提交请求。需要动态指定一组对象处理请求例如在运行时动态调整处理链。 责任链模式的变体 纯责任链模式 每个处理者要么处理请求要么将请求传递给下一个处理者但不能同时进行。这种模式通常用于严格的链式处理例如审批流程。 不纯责任链模式 处理者可以部分处理请求然后将请求传递给下一个处理者。这种模式允许处理者在处理请求的同时继续传递请求适用于需要多个处理者共同完成任务的场景。 带中断的责任链模式 处理者可以在处理请求后决定是否中断链的传递。这种模式适用于某些情况下一旦请求被处理就不需要继续传递的场景。 带优先级的责任链模式 处理者根据优先级决定是否处理请求优先级高的处理者先处理请求。这种模式适用于需要根据优先级决定处理顺序的场景。 以下是基于责任链模式的不同变体的 C 代码示例。每个示例都展示了如何在 C 中实现责任链模式的不同形式。 1. 纯责任链模式 在纯责任链模式中每个处理者要么处理请求要么将请求传递给下一个处理者。处理者不会同时处理请求并传递请求。 #include iostream #include memoryclass Handler { public:virtual ~Handler() default;virtual void setNext(std::shared_ptrHandler) 0;virtual void handle(const std::string request) 0; };class BaseHandler : public Handler { protected:std::shared_ptrHandler nextHandler;public:void setNext(std::shared_ptrHandler handler) override {nextHandler handler;}void handle(const std::string request) override {if (nextHandler) {nextHandler-handle(request);}} };class ConcreteHandlerA : public BaseHandler { public:void handle(const std::string request) override {if (request A) {std::cout ConcreteHandlerA handles request: request std::endl;} else {BaseHandler::handle(request);}} };class ConcreteHandlerB : public BaseHandler { public:void handle(const std::string request) override {if (request B) {std::cout ConcreteHandlerB handles request: request std::endl;} else {BaseHandler::handle(request);}} };int main() {auto handlerA std::make_sharedConcreteHandlerA();auto handlerB std::make_sharedConcreteHandlerB();handlerA-setNext(handlerB);handlerA-handle(B); // ConcreteHandlerB handles request: BhandlerA-handle(A); // ConcreteHandlerA handles request: AhandlerA-handle(C); // No handler can process Creturn 0; }2. 不纯责任链模式 在不纯责任链模式中处理者可以部分处理请求然后将请求传递给下一个处理者。 #include iostream #include memoryclass Handler { public:virtual ~Handler() default;virtual void setNext(std::shared_ptrHandler) 0;virtual void handle(const std::string request) 0; };class BaseHandler : public Handler { protected:std::shared_ptrHandler nextHandler;public:void setNext(std::shared_ptrHandler handler) override {nextHandler handler;}void handle(const std::string request) override {if (nextHandler) {nextHandler-handle(request);}} };class ConcreteHandlerA : public BaseHandler { public:void handle(const std::string request) override {if (request A) {std::cout ConcreteHandlerA handles request: request std::endl;} else {std::cout ConcreteHandlerA partially processes request: request std::endl;BaseHandler::handle(request);}} };class ConcreteHandlerB : public BaseHandler { public:void handle(const std::string request) override {if (request B) {std::cout ConcreteHandlerB handles request: request std::endl;} else {std::cout ConcreteHandlerB partially processes request: request std::endl;BaseHandler::handle(request);}} };int main() {auto handlerA std::make_sharedConcreteHandlerA();auto handlerB std::make_sharedConcreteHandlerB();handlerA-setNext(handlerB);handlerA-handle(B); // ConcreteHandlerB handles request: BhandlerA-handle(A); // ConcreteHandlerA handles request: AhandlerA-handle(C); // ConcreteHandlerA partially processes request: C// ConcreteHandlerB partially processes request: Creturn 0; }3. 带中断的责任链模式 在带中断的责任链模式中处理者可以在处理请求后决定是否中断链的传递。 #include iostream #include memoryclass Handler { public:virtual ~Handler() default;virtual void setNext(std::shared_ptrHandler) 0;virtual bool handle(const std::string request) 0; };class BaseHandler : public Handler { protected:std::shared_ptrHandler nextHandler;public:void setNext(std::shared_ptrHandler handler) override {nextHandler handler;}bool handle(const std::string request) override {if (nextHandler) {return nextHandler-handle(request);}return false;} };class ConcreteHandlerA : public BaseHandler { public:bool handle(const std::string request) override {if (request A) {std::cout ConcreteHandlerA handles request: request std::endl;return true; // 中断链式传递}return BaseHandler::handle(request);} };class ConcreteHandlerB : public BaseHandler { public:bool handle(const std::string request) override {if (request B) {std::cout ConcreteHandlerB handles request: request std::endl;return true; // 中断链式传递}return BaseHandler::handle(request);} };int main() {auto handlerA std::make_sharedConcreteHandlerA();auto handlerB std::make_sharedConcreteHandlerB();handlerA-setNext(handlerB);handlerA-handle(B); // ConcreteHandlerB handles request: BhandlerA-handle(A); // ConcreteHandlerA handles request: AhandlerA-handle(C); // No handler can process Creturn 0; }4. 带优先级的责任链模式 在带优先级的责任链模式中处理者根据优先级决定是否处理请求优先级高的处理者先处理请求。 #include iostream #include memory #include vector #include algorithmclass Handler { public:virtual ~Handler() default;virtual int getPriority() const 0;virtual void handle(const std::string request) 0; };class BaseHandler : public Handler { protected:int priority;public:BaseHandler(int p) : priority(p) {}int getPriority() const override {return priority;}void handle(const std::string request) override {// 默认不处理} };class ConcreteHandlerA : public BaseHandler { public:ConcreteHandlerA(int p) : BaseHandler(p) {}void handle(const std::string request) override {if (request A) {std::cout ConcreteHandlerA handles request: request std::endl;}} };class ConcreteHandlerB : public BaseHandler { public:ConcreteHandlerB(int p) : BaseHandler(p) {}void handle(const std::string request) override {if (request B) {std::cout ConcreteHandlerB handles request: request std::endl;}} };int main() {auto handlerA std::make_sharedConcreteHandlerA(2);auto handlerB std::make_sharedConcreteHandlerB(1);std::vectorstd::shared_ptrHandler handlers {handlerA, handlerB};// 根据优先级排序std::sort(handlers.begin(), handlers.end(), [](const auto h1, const auto h2) {return h1-getPriority() h2-getPriority();});for (const auto handler : handlers) {handler-handle(B); // ConcreteHandlerB handles request: Bhandler-handle(A); // ConcreteHandlerA handles request: A}return 0; }总结 以上代码示例展示了责任链模式的四种不同变体 纯责任链模式处理者要么处理请求要么传递请求。不纯责任链模式处理者可以部分处理请求并传递请求。带中断的责任链模式处理者可以中断链的传递。带优先级的责任链模式处理者根据优先级决定处理顺序。 这些变体可以根据具体需求灵活选择和实现以满足不同场景下的功能需求。 基于责任链模式特点的软件架构模式 中间件架构 在Web开发中中间件架构通常使用责任链模式来处理HTTP请求。每个中间件都可以对请求进行处理然后决定是否将请求传递给下一个中间件。例如Express.js中的中间件机制就是基于责任链模式实现的。 事件处理系统 在GUI编程中事件处理系统通常使用责任链模式来处理用户事件。每个事件处理器可以处理事件或者将事件传递给下一个处理器。例如Java AWT/Swing中的事件处理机制就是基于责任链模式实现的。 工作流引擎 在工作流引擎中责任链模式可以用于处理工作流中的各个步骤。每个步骤可以处理任务或者将任务传递给下一个步骤。例如Activiti等工作流引擎中的任务处理机制就是基于责任链模式实现的。 过滤器链 在Web应用中过滤器链通常使用责任链模式来处理请求和响应。每个过滤器可以对请求或响应进行处理然后将其传递给下一个过滤器。例如Java Servlet中的过滤器机制就是基于责任链模式实现的。 总结 责任链模式通过将请求的发送者和接收者解耦提供了一种灵活的方式来处理请求。它适用于多个对象可以处理同一请求的场景并且可以通过不同的变体来满足不同的需求。基于责任链模式的特点许多软件架构模式如中间件架构、事件处理系统、工作流引擎和过滤器链都采用了这种模式来实现灵活的处理机制。
http://www.hkea.cn/news/14256695/

相关文章:

  • c 网站开发构想桂林网站制作公司
  • 无锡找做网站中国五码一级做爰网站
  • 珠江摩尔网站建设小说+wordpress
  • 专业制作网站有哪些青岛开发区网站建设公司
  • 专业的公司网站设计服务上海建设检测网上登记网站
  • 一六八互联网站建设wordpress自动重命名
  • 桂林网站制作培训班网页设计代码意思
  • 中煤第三建设集团网站企业管理培训课程百度云
  • 前端网站开发兼职网站用asp还是php
  • 伙购网官方网站做网站要买什么类型云空间
  • 医疗知识普及网站开发嘉定建设机械网站
  • 微网站是什么时候创建的小学生简短小新闻摘抄
  • 庆元县建设局网站wordpress 页面位置
  • 企业网站设计与推广游戏推广平台怎么赚钱
  • 自己做网站不推广德阳网站建设公司
  • 专业网站设计联系电话去除tag wordpress
  • 涞源县住房和城乡建设局网站注册一个公司网站需要多少钱
  • 网站后续建设说明玉环做企业网站
  • 国外网站赚钱防做网站视频
  • 我需要把网站做网站后台无法修改
  • 做全网营销型网站建设外国人爱做视频网站吗
  • 研发网站建设报价视频网站会员系统怎么做
  • 最高法律网站是做啥的亚马逊雨林
  • 鹤山做网站公司seo sem 做网站
  • 网页设计与网站建设有区别吗免费建设物流网站
  • 威海西郊建设集团网站简单个人网站源码
  • 网站里的图片是怎么做的自己如何做企业网站
  • jsp mysql 网站开发2023年6月份又封城了
  • 国内做的比较大的外贸电商网站建设网站的功能及目的
  • 上街三屏网站建设无锡网站建设 无锡和诚科技