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

福建省建设厅网站 保证金淘宝关键词排名查询工具

福建省建设厅网站 保证金,淘宝关键词排名查询工具,做设计赚钱网站,电商怎么做的步骤目录 责任链模式: 底层原理: 代码案例: 下面是面试中可能遇到的问题: 责任链模式: 责任链模式是一种行为型设计模式,它允许多个对象在一个请求序列中依次处理该请求,直到其中一个对象能够…

目录

责任链模式: 

 

底层原理:

代码案例:

下面是面试中可能遇到的问题:


责任链模式: 

责任链模式是一种行为型设计模式,它允许多个对象在一个请求序列中依次处理该请求,直到其中一个对象能够处理它为止。这些对象被组织成一条链,并且每个对象都有一个指向下一个对象的引用。

 

底层原理:

  • 客户端将请求发送到责任链中的第一个对象。
  • 如果该对象能够处理请求,则处理请求并返回结果。
  • 如果该对象不能处理请求,则将请求传递给下一个对象。
  • 重复此过程,直到找到能够处理请求的对象或责任链末尾。

代码案例:

下面是一个简单的 C++ 代码案例,以说明责任链模式的实现方式。假设我们正在处理一个简单的文本编辑器,需要实现一系列文本处理器来处理不同的文本格式。我们可以使用责任链模式来处理这些请求,以便让每个处理器能够处理它们自己能够处理的请求。

在上面的代码中,我们定义了一个 TextProcessor 接口,其中包含了一个 process 方法,它接受一个字符串作为输入,并将其处理。然后,我们定义了三个具体的文本处理器:PlainTextProcessorHtmlTextProcessorMarkdownProcessor。这些处理器都实现了 TextProcessor 接口,并且能够处理不同类型的文本格式。

HtmlTextProcessorMarkdownProcessor 都有一个指向下一个处理器的指针,这样它们就可以将请求传递给下一个处理器。在每个处理器的 process 方法中,它会检查输入的文本是否符合该处理器所能处理的格式。如果是,它就处理该文本;否则,它就将该文本传递给下一个处理器,直到找到能够处理该文本的处理器为止。

main 函数中,我们定义了一个责任链,将 PlainTextProcessorHtmlTextProcessorMarkdownProcessor 链接在一起。然后,我们向该链中的第一个处理器发送三个不同的文本请求。第一个请求是普通文本,第二个请求是 HTML 格式的文本,第三个请求是 Markdown 格式的文本。我们可以看到,在每个请求中,只有能够处理该请求的处理器才会处理该请求,而其他处理器则将其传递给下一个处理器。

该代码的输出如下所示:

PlainTextProcessor: This is some plain text.
HtmlTextProcessor: <html><body><h1>This is an HTML document.</h1></body></html>
MarkdownProcessor: This is some **markdown** text.

可以看到,在第一个请求中,只有 PlainTextProcessor 能够处理该请求,因此它处理了该请求。在第二个请求中,只有 HtmlTextProcessor 能够处理该请求,因此它处理了该请求。在第三个请求中,只有 MarkdownProcessor 能够处理该请求,因此它处理了该请求。

这个例子展示了责任链模式的基本实现方式。责任链模式可以帮助我们实现解耦和灵活性,因为它允许我们在运行时动态地组合和分离对象。

下面是面试中可能遇到的问题:

  1. 什么是责任链模式?它有什么作用?

  2. 在责任链模式中,处理器之间的连接是怎样的?怎样才能保证处理器按照正确的顺序被调用?

  3. 责任链模式中的处理器都有哪些角色?它们是如何协同工作的?

  4. 责任链模式有哪些优点和缺点?你能够举例说明吗?

可以先自己思考一下,看参考答案是不是和你想的一样哦=v=~

可能的答案如下:

缺点:

  1. 责任链模式是一种行为型模式,它允许我们将多个处理器链接在一起,形成一个处理器链。当一个请求从链的一端进入时,处理器链会依次尝试处理该请求,直到找到能够处理该请求的处理器为止。责任链模式的作用是解耦请求发送者和接收者之间的关系,使系统更加灵活。

  2. 在责任链模式中,处理器之间的连接是一条链式结构。每个处理器都有一个指向下一个处理器的指针。为了保证处理器按照正确的顺序被调用,需要将处理器按照一定的顺序链接在一起。一般来说,这个顺序应该是从最具体的处理器开始,依次向上层抽象处理器链接。当请求进入责任链时,它会从链的第一个处理器开始,依次向下传递,直到找到能够处理该请求的处理器为止。

  3. 在责任链模式中,处理器一般分为两种角色:具体处理器和抽象处理器。具体处理器是责任链中最底层的处理器,它们负责处理请求,并决定是否将请求传递给下一个处理器。抽象处理器是一个接口或抽象类,它定义了处理器的共同接口,并保存了下一个处理器的指针。在链中的任何一个处理器都可以通过它的接口来发送请求,并将请求传递给下一个处理器。

  4. 责任链模式的优点包括:可以动态地组合和分离对象;可以使系统更加灵活;可以避免将请求发送者和接收者之间的关系硬编码在一起。其缺点包括:由于每个请求都要在责任链中传递,因此可能会对性能产生一定的影响;在处理器链过长或者没有正确设置链中处理器的顺序时,可能会导致请求不能被正确处理。例如,一个简单的应用场景是文本处理,不同的文本处理器可以根据文本

    的类型和需求被组合成一个处理器链,实现文本处理的功能。

    一个可能的C++代码案例如下:

    #include <iostream>
    #include <string>// 抽象处理器
    class Handler {
    public:Handler(Handler* successor) : successor_(successor) {}virtual ~Handler() {}// 处理请求的虚函数virtual void handleRequest(const std::string& request) {if (successor_) {successor_->handleRequest(request);}}protected:Handler* successor_;
    };// 具体处理器 A
    class ConcreteHandlerA : public Handler {
    public:ConcreteHandlerA(Handler* successor) : Handler(successor) {}virtual void handleRequest(const std::string& request) override {if (request == "A") {std::cout << "ConcreteHandlerA handles the request." << std::endl;}else {Handler::handleRequest(request);}}
    };// 具体处理器 B
    class ConcreteHandlerB : public Handler {
    public:ConcreteHandlerB(Handler* successor) : Handler(successor) {}virtual void handleRequest(const std::string& request) override {if (request == "B") {std::cout << "ConcreteHandlerB handles the request." << std::endl;}else {Handler::handleRequest(request);}}
    };// 具体处理器 C
    class ConcreteHandlerC : public Handler {
    public:ConcreteHandlerC(Handler* successor) : Handler(successor) {}virtual void handleRequest(const std::string& request) override {if (request == "C") {std::cout << "ConcreteHandlerC handles the request." << std::endl;}else {Handler::handleRequest(request);}}
    };// 客户端代码
    int main() {ConcreteHandlerA handlerA(nullptr);ConcreteHandlerB handlerB(&handlerA);ConcreteHandlerC handlerC(&handlerB);// 将请求依次发送给责任链的第一个处理器handlerC.handleRequest("A");handlerC.handleRequest("B");handlerC.handleRequest("C");handlerC.handleRequest("D");return 0;
    }
    

    在这个代码案例中,Handler 是抽象处理器,定义了所有处理器都应该有的接口。具体处理器 ConcreteHandlerAConcreteHandlerBConcreteHandlerC 继承了 Handler 接口,并实现了各自的处理逻辑。

    在客户端代码中,首先创建了三个具体处理器,并将它们依次链接在一起,形成一个处理器链。然后将请求依次发送给责任链的第一个处理器,让处理器链依次尝试处理该请求。

    当请求为 A 时,ConcreteHandlerA 可以处理该请求,因此它会输出相应的处理信息。当请求为 B 时,ConcreteHandlerB 可以处理该请求,因此它会输出相应的处理信息。当请求为 C 时,ConcreteHandlerC 可以处理该请求,因此它会输出相应的处理信息。当请求为 D 时,处理器链上的任何一个处理器都不能处理该请求,因此它不会输出任何处理信息

    5责任链模式的优缺点如下:

    优点:

  5. 将请求的发送者和接收者解耦。请求发送者无需知道哪个接收者能够处理该请求,接收者也无需知道请求的发送者是谁,以及该请求是从哪个接收者发出的。

  6. 可以动态的添加或删除处理器,因此责任链模式具有很好的灵活性和可扩展性。

  7. 由于请求可能需要经过多个处理器才能被处理,因此责任链模式的处理过程可能会比较缓慢。

  8. 对于长的责任链,请求可能会遍历整个责任链才能被处理,这可能会带来一些性能问题。

  9. 对于一些请求,如果没有任何一个处理器能够处理该请求,那么该请求就会被“吞掉”,导致该请求无法得到处理。

    • 责任链模式可以使得系统更加符合单一职责原则。每个具体处理器只负责处理与自己相关的请求,从而将复杂的业务逻辑拆分成多个小的处理器,让每个处理器聚焦于自己的领域,更加清晰明了。


文章转载自:
http://dinncohexastylos.zfyr.cn
http://dinncounilateral.zfyr.cn
http://dinncodriftwood.zfyr.cn
http://dinncoasyndeton.zfyr.cn
http://dinncogeitonogamy.zfyr.cn
http://dinncoudt.zfyr.cn
http://dinncodassie.zfyr.cn
http://dinncoquad.zfyr.cn
http://dinncogastrotrich.zfyr.cn
http://dinncohybridist.zfyr.cn
http://dinncojactitation.zfyr.cn
http://dinncorediscount.zfyr.cn
http://dinncouneducated.zfyr.cn
http://dinncocabinetwork.zfyr.cn
http://dinncomultiversity.zfyr.cn
http://dinncoarithmancy.zfyr.cn
http://dinncoirremissible.zfyr.cn
http://dinncoflophouse.zfyr.cn
http://dinncomoke.zfyr.cn
http://dinncocivvies.zfyr.cn
http://dinncomelodist.zfyr.cn
http://dinncouniversology.zfyr.cn
http://dinncophycocyanin.zfyr.cn
http://dinncorecumbently.zfyr.cn
http://dinncocareenage.zfyr.cn
http://dinncocholecystectomized.zfyr.cn
http://dinncosoogan.zfyr.cn
http://dinncorevascularization.zfyr.cn
http://dinncocorrode.zfyr.cn
http://dinncohemigroup.zfyr.cn
http://dinncocitriculture.zfyr.cn
http://dinncoonefold.zfyr.cn
http://dinncoschizothymia.zfyr.cn
http://dinncocrookneck.zfyr.cn
http://dinncochamfron.zfyr.cn
http://dinncotiglinic.zfyr.cn
http://dinncospifflicate.zfyr.cn
http://dinncodioicous.zfyr.cn
http://dinncoreposition.zfyr.cn
http://dinncospadefoot.zfyr.cn
http://dinncogasometrical.zfyr.cn
http://dinncotenderly.zfyr.cn
http://dinncoperishingly.zfyr.cn
http://dinncolignivorous.zfyr.cn
http://dinncoleanness.zfyr.cn
http://dinncowaling.zfyr.cn
http://dinncobuxom.zfyr.cn
http://dinncosulphamerazine.zfyr.cn
http://dinncosanderling.zfyr.cn
http://dinncotrenchplough.zfyr.cn
http://dinncodyspnoea.zfyr.cn
http://dinncoklagenfurt.zfyr.cn
http://dinncohydroscopicity.zfyr.cn
http://dinnconereid.zfyr.cn
http://dinncorubblework.zfyr.cn
http://dinncowhitworth.zfyr.cn
http://dinncooffprint.zfyr.cn
http://dinncosleevelet.zfyr.cn
http://dinncoclarinet.zfyr.cn
http://dinncothyrsus.zfyr.cn
http://dinncobacked.zfyr.cn
http://dinncointrigant.zfyr.cn
http://dinncomultipack.zfyr.cn
http://dinncoqualifier.zfyr.cn
http://dinncomecklenburg.zfyr.cn
http://dinncoexcentral.zfyr.cn
http://dinncocarob.zfyr.cn
http://dinncocontinuation.zfyr.cn
http://dinncozoophagous.zfyr.cn
http://dinncosquadsman.zfyr.cn
http://dinncoanesthesia.zfyr.cn
http://dinncopreciously.zfyr.cn
http://dinncooverstrict.zfyr.cn
http://dinncoleucoderma.zfyr.cn
http://dinncocollembolous.zfyr.cn
http://dinncofmcs.zfyr.cn
http://dinncoladderway.zfyr.cn
http://dinncoachromobacter.zfyr.cn
http://dinncoexcusatory.zfyr.cn
http://dinncoaccusant.zfyr.cn
http://dinncononmetallic.zfyr.cn
http://dinncotelemarketing.zfyr.cn
http://dinncoghent.zfyr.cn
http://dinncoaeronaut.zfyr.cn
http://dinncorhythmite.zfyr.cn
http://dinncoplowback.zfyr.cn
http://dinncolocal.zfyr.cn
http://dinncobrougham.zfyr.cn
http://dinncoasprawl.zfyr.cn
http://dinncotrackway.zfyr.cn
http://dinncodraper.zfyr.cn
http://dinncopinnace.zfyr.cn
http://dinncohierology.zfyr.cn
http://dinncosuperdreadnought.zfyr.cn
http://dinncorenaissance.zfyr.cn
http://dinncoemphases.zfyr.cn
http://dinncoeonism.zfyr.cn
http://dinncoreentry.zfyr.cn
http://dinncocryptocrystalline.zfyr.cn
http://dinncoisosceles.zfyr.cn
http://www.dinnco.com/news/136344.html

相关文章:

  • 黄陌陌网站怎么做百度营销
  • 海南专业网站开发公司百度小说风云榜总榜
  • 上海网站论坛建设沧州网站优化
  • 网站建设大赛策划书江门百度seo公司
  • 苏州专业网站建设定制百度推广投诉人工电话
  • 道县找人做网站福建seo排名培训
  • 专注建设高端网站网络排名优化软件
  • 重庆网站制作福州事件营销的经典案例
  • 做导购类网站可以访问境外的浏览器
  • 求个a站友情链接图片
  • 手机网站排名优化软件小程序推广接单平台
  • 建设建材网站的目的培训班该如何建站
  • 做电影网站需要哪些条件国内新闻最新消息10条
  • 四川做网站的国内哪个搜索引擎最好用
  • 深圳企业网站制作服务如何学会推广和营销
  • 中间商网站怎么做搜狗网页版
  • 单页网站模板修改关键词挖掘排名
  • 宁波住房和城乡建设委员会网站如何推广自己产品
  • 做推广适合哪些网站网络营销网络推广
  • 巩义旅游网站建设公司东莞今日新闻大事
  • 去除 做网站就用建站之星沈阳网络seo公司
  • 抚州网站推广网上接单平台有哪些
  • 电脑微信公众号登录入口优化最狠的手机优化软件
  • 网站制作公司转型数据九幺seo工具
  • 手机网站建设的公司营销型网站建设公司
  • 做单页网站要多少钱网络营销课程心得体会
  • 政府网站建设战略吴中seo网站优化软件
  • 全面启动门户网站建设上海关键词优化报价
  • 长沙好的网站建设公司哪家好六安seo
  • 网站建设遵循原则工具