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

快速模板建站最新消息新闻

快速模板建站,最新消息新闻,对网站进行seo优化,网站建设技术要求动机(Motivation) 在软件构建过程中,一个请求可能被多个对象处理,但是每个请求在运行时只能有个接受者,如果显示指定,将必不可少地带来请求者与接受者的紧耦合。 如何使请求的发送者不需要指定具体的接受…

动机(Motivation)

在软件构建过程中,一个请求可能被多个对象处理,但是每个请求在运行时只能有个接受者,如果显示指定,将必不可少地带来请求者与接受者的紧耦合。

如何使请求的发送者不需要指定具体的接受者?让请求的接受者自己在运行是决定来处理请求,从而两者解耦。

模式定义:

使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递请求,直到有一个请求处理他为止。

#include <iostream>
#include <string>using namespace std;enum class RequestType {REQ_HANDLER1,REQ_HANDLER2,REQ_HANDLER3,
};class Request {string description;RequestType reqType;
public:Request(const string& desc, RequestType type) : description(desc), reqType(type) {}RequestType getReqType() const { return reqType; }const string& getDescription() const { return description; }
};class ChainHandler {ChainHandler* nextChain;void sendRequestToNextHandler(const Request& req) {if (nullptr != nextChain) {nextChain->handle(req);}}
protected:virtual bool canHandleRequest(const Request& req) = 0;virtual void processRequest(const Request& req) = 0;
public:ChainHandler() { nextChain = nullptr; }void setNextChain(ChainHandler* next) { nextChain = next; }void handle(const Request& req) {if (canHandleRequest(req)) {processRequest(req);}else{sendRequestToNextHandler(req);}}
};class Handler1 : public ChainHandler {
protected:virtual bool canHandleRequest(const Request& req) override {return req.getReqType() == RequestType::REQ_HANDLER1;}virtual void processRequest(const Request& req) override {cout << "Handler1 is handle request: " << req.getDescription() << endl;}
};class Handler2 : public ChainHandler {
protected:virtual bool canHandleRequest(const Request& req) override {return req.getReqType() == RequestType::REQ_HANDLER2;}virtual void processRequest(const Request& req) override {cout << "Handler2 is handle request: " << req.getDescription() << endl;}
};class Handler3 : public ChainHandler {
protected:virtual bool canHandleRequest(const Request& req) override {return req.getReqType() == RequestType::REQ_HANDLER3;}virtual void processRequest(const Request& req) override {cout << "Handler3 is handle request: " << req.getDescription() << endl;}
};int main() {Handler1 h1;Handler1 h2;Handler1 h3;h1.setNextChain(&h2);h2.setNextChain(&h3);Request req("process task ...", RequestType::REQ_HANDLER3);h1.handle(req);return 0;
}

要点总结:

Chain of Responsibility模式的应用场合在于“一个请求可能有多个接受者,但是最后真正的接受者只有一个“,这时候请求发送者与接受者的耦合有可能出现”变化脆弱“的症状,指责链的目的就是将两者解耦,从而更好地应对变化。

应用了Chain of Responsibility模式后,对象的职责分派将更具灵活性。我们可以在运行时动态增加/修改请求的处理职责。

如果请求传递到职责链的末尾乃得不到处理,应该有一个合理的缺省机制。这也使每一个接受对象的职责,而不是发出请求的对象的职责。

http://www.zhongyajixie.com/news/3926.html

相关文章:

  • 做网站应该掌握的技术企业网站营销优缺点
  • 手机做网站用什么软件seo网络推广培训
  • 做网站装什么服务器济源网络推广
  • 电子商务推广网站百度官网客服
  • 公司网站维护如何做分录推广普通话作文
  • 伊犁北京网站建设东莞搜索网络优化
  • 外贸网站网站推广网络广告投放
  • 武汉做网站价格互联网广告管理暂行办法
  • 拐角型网站百度在线
  • 牡丹江在哪个城市乐天seo视频教程
  • 网站申请名称和域名搜索引擎优化方法有哪些
  • 网站建设虚拟windows优化大师官方免费
  • html网站开发实验报告百度搜索广告
  • 网站备案信息的核查方式网页模板免费html
  • 网站建设公司 中企动力公司2345网址导航安装
  • 最炫的网站直播营销
  • css做的网站不能往下拉如何创建自己的网站平台
  • 做网站的那家公司好怎样在百度上发布自己的文章
  • 找客户资源的软件陕西网站关键词自然排名优化
  • 免费开源的网站系统搜易网提供的技术服务
  • 兰州城关区建设局网站网站是怎么做出来的
  • 杭州百度快照优化排名中小企业网站优化
  • wordpress主题汉化实战免费智能seo收录工具
  • 营销型网站建设模板php搭建一个简单的网站
  • 网站建设部门seo优化网络公司
  • seo网站推广网站外链怎么发布
  • 门户网站建设流程如何让百度能查到自己
  • 做网站要用框架吗产品推广怎么做
  • 网站建设中的多语言翻译如何实现网络营销组合策略
  • 家居公司网站建设方案ppt电脑课程培训零基础