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

做网站 接单淘宝关键词搜索

做网站 接单,淘宝关键词搜索,江西南昌建设厅网站,jsp ajax网站开发典型实例 pdf职责链模式 一、原理和实现二、实现方式1) 使用链表实现2) 使用数组实现3) 扩展 作用:复用和扩展,在实际的项目开发中比较常用。在框架开发中,我们也可以利用它们来提供框架的扩展点,能够让框架的使用者在不修改框架源码的情况下&…

职责链模式

  • 一、原理和实现
  • 二、实现方式
    • 1) 使用链表实现
    • 2) 使用数组实现
    • 3) 扩展

作用:复用和扩展,在实际的项目开发中比较常用。在框架开发中,我们也可以利用它们来提供框架的扩展点,能够让框架的使用者在不修改框架源码的情况下,基于扩展点定制化框架的功能。

一、原理和实现

职责链模式的英文翻译是 Chain Of Responsibility Design Pattern。在 GoF 的《设计模式》中,它是这么定义的:

Avoid coupling the sender of a request to its receiver by giving more than one object a chance to handle the request. Chain the receiving objects and pass the request along the chain until an object handles it.

翻译成中文就是:将请求的发送和接收解耦,让多个接收对象都有机会处理这个请求。将这些接收对象串成一条链,并沿着这条链传递这个请求,直到链上的某个接收对象能够处理它为止,实时上,在常见的使用场景中,我们的责任链并不是和概念中的完全一样。

  • 原始概念中,是直到链上的某个接收对象能够处理它为止。
  • 实际使用中,链上的所有对象都可以对请求进行特殊处理。

二、实现方式

1) 使用链表实现

第一种实现方式如下所示。其中,Handler 是所有处理器类的抽象父类,handle() 是抽象方法。每个具体的处理器类(HandlerA、HandlerB)的 handle() 函数的代码结构类似,如果它能处理该请求,就不继续往下传递;如果不能处理,则交由后面的处理器来处理(也就是调用 successor.handle())。HandlerChain 是处理器链,从数据结构的角度来看,它就是一个记录了链头、链尾的链表。其中,记录链尾是为了方便添加处理器。

public abstract class Handler {// 拥有具体的处理方法,抽象protected Handler nextHandler;public void setNextHandler(Handler nextHandler) {this.nextHandler = nextHandler;}abstract void handle();
}public class HandlerA extends Handler{@Overridepublic void handle() {System.out.println("第一个过滤器");if (nextHandler != null) {nextHandler.handle();}}
}public class HandlerB extends Handler{@Overridepublic void handle() {System.out.println("第二个过滤器");if (nextHandler != null) {nextHandler.handle();}}
}public class HandlerChain {private Handler head = null;private Handler tail = null;public void addHandler(Handler handler) {handler.setSuccessor(null);if (head == null) {head = handler;tail = handler;return;}tail.setSuccessor(handler);tail = handler;}public void handle() {if (head != null) {head.handle();}}
}// 使用举例
public class Application {public static void main(String[] args) {HandlerChain chain = new HandlerChain();chain.addHandler(new HandlerA());chain.addHandler(new HandlerB());chain.handle();}
}

实际上,上面的代码实现不够优雅。处理器类的 handle() 函数,不仅包含自己的业务逻辑,还包含对下一个处理器的调用,也就是代码中的 successor.handle()。一个不熟悉这种代码结构的程序员,在添加新的处理器类的时候,很有可能忘记在 handle() 函数中调用 successor.handle(),这就会导致代码出现 bug。

针对这个问题,我们对代码进行重构,利用模板模式,将调用 successor.handle() 的逻辑从具体的处理器类中剥离出来,放到抽象父类中。这样具体的处理器类只需要实现自己的业务逻辑就可以了。重构之后的代码如下所示:

public abstract class Handler {protected Handler successor = null;public void setSuccessor(Handler successor) {this.successor = successor;}public final void handle() {boolean handled = doHandle();if (successor != null && !handled) {successor.handle();}}protected abstract boolean doHandle();
}public class HandlerA extends Handler {@Overrideprotected boolean doHandle() {boolean handled = false;//...return handled;}
}public class HandlerB extends Handler {@Overrideprotected boolean doHandle() {boolean handled = false;//...return handled;}
}
// HandlerChain和Application代码不变

2) 使用数组实现

我们再来看第二种实现方式,代码如下所示。这种实现方式更加简单。HandlerChain 类用数组而非链表来保存所有的处理器,并且需要在 HandlerChain 的 handle() 函数中,依次调用每个处理器的 handle() 函数。

public interface IHandler {boolean handle();
}public class HandlerA implements IHandler {@Overridepublic boolean handle() {boolean handled = false;//...return handled;}
}
public class HandlerB implements IHandler {@Overridepublic boolean handle() {boolean handled = false;//...return handled;}
}public class HandlerChain {private List<IHandler> handlers = new ArrayList<>();public void addHandler(IHandler handler) {this.handlers.add(handler);}public void handle() {for (IHandler handler : handlers) {boolean handled = handler.handle();if (handled) {break;}}}
}
// 使用举例
public class Application {public static void main(String[] args) {HandlerChain chain = new HandlerChain();chain.addHandler(new HandlerA());chain.addHandler(new HandlerB());chain.handle();}
}

3) 扩展

在 GoF 给出的定义中,**如果处理器链上的某个处理器能够处理这个请求,那就不会继续往下传递请求。实际上,职责链模式还有一种变体,那就是请求会被所有的处理器都处理一遍,不存在中途终止的情况。**这种变体也有两种实现方式:用链表存储处理器和用数组存储处理器,跟上面的两种实现方式类似,只需要稍微修改即可。

我这里只给出其中一种实现方式,如下所示。另外一种实现方式你对照着上面的实现自行修改。

public abstract class Handler {protected Handler successor = null;public void setSuccessor(Handler successor) {this.successor = successor;}public final void handle() {doHandle();if (successor != null) {successor.handle();}}protected abstract void doHandle();
}public class HandlerA extends Handler {@Overrideprotected void doHandle() {//...}
}public class HandlerB extends Handler {@Overrideprotected void doHandle() {//...}
}public class HandlerChain {private Handler head = null;private Handler tail = null;public void addHandler(Handler handler) {handler.setSuccessor(null);if (head == null) {head = handler;tail = handler;return;}tail.setSuccessor(handler);tail = handler;}public void handle() {if (head != null) {head.handle();}}
}// 使用举例
public class Application {public static void main(String[] args) {HandlerChain chain = new HandlerChain();chain.addHandler(new HandlerA());chain.addHandler(new HandlerB());chain.handle();}
}

文章转载自:
http://eucalyptole.fwrr.cn
http://dishtowel.fwrr.cn
http://trination.fwrr.cn
http://ameslan.fwrr.cn
http://postpaid.fwrr.cn
http://bourn.fwrr.cn
http://diskette.fwrr.cn
http://porcelaneous.fwrr.cn
http://collectively.fwrr.cn
http://vad.fwrr.cn
http://longshoreman.fwrr.cn
http://salii.fwrr.cn
http://dimensional.fwrr.cn
http://picador.fwrr.cn
http://rookling.fwrr.cn
http://marisat.fwrr.cn
http://marcescent.fwrr.cn
http://coed.fwrr.cn
http://bolar.fwrr.cn
http://hewett.fwrr.cn
http://disqualification.fwrr.cn
http://bawdry.fwrr.cn
http://bambino.fwrr.cn
http://vesiculous.fwrr.cn
http://flyweight.fwrr.cn
http://inexpediency.fwrr.cn
http://slaggy.fwrr.cn
http://tuneup.fwrr.cn
http://estron.fwrr.cn
http://choreoid.fwrr.cn
http://ectoparasite.fwrr.cn
http://trichlorophenol.fwrr.cn
http://lehua.fwrr.cn
http://zirconic.fwrr.cn
http://strongylid.fwrr.cn
http://judaeophobe.fwrr.cn
http://nasty.fwrr.cn
http://schradan.fwrr.cn
http://contrive.fwrr.cn
http://ferrule.fwrr.cn
http://tailender.fwrr.cn
http://bombycid.fwrr.cn
http://rapidan.fwrr.cn
http://basidium.fwrr.cn
http://swatantra.fwrr.cn
http://pedocal.fwrr.cn
http://nanoinstruction.fwrr.cn
http://significative.fwrr.cn
http://paillasse.fwrr.cn
http://synspermy.fwrr.cn
http://tolerably.fwrr.cn
http://oakum.fwrr.cn
http://garefowl.fwrr.cn
http://sold.fwrr.cn
http://jaycee.fwrr.cn
http://standpatter.fwrr.cn
http://lymphomatosis.fwrr.cn
http://cryptozoic.fwrr.cn
http://keynes.fwrr.cn
http://selcall.fwrr.cn
http://caravaggiesque.fwrr.cn
http://nonsexual.fwrr.cn
http://beggar.fwrr.cn
http://stratovolcano.fwrr.cn
http://atmosphere.fwrr.cn
http://forehock.fwrr.cn
http://lustreless.fwrr.cn
http://infuscate.fwrr.cn
http://nociassociation.fwrr.cn
http://monohydroxy.fwrr.cn
http://exaggeration.fwrr.cn
http://skene.fwrr.cn
http://ethylamine.fwrr.cn
http://ratan.fwrr.cn
http://buenaventura.fwrr.cn
http://comstockian.fwrr.cn
http://scaddle.fwrr.cn
http://recollect.fwrr.cn
http://therian.fwrr.cn
http://lipography.fwrr.cn
http://coachwhip.fwrr.cn
http://telemeter.fwrr.cn
http://nonparticipator.fwrr.cn
http://greasily.fwrr.cn
http://gatefold.fwrr.cn
http://ismailian.fwrr.cn
http://honeycreeper.fwrr.cn
http://bacco.fwrr.cn
http://topmaul.fwrr.cn
http://hexasyllable.fwrr.cn
http://lampoonist.fwrr.cn
http://cerebric.fwrr.cn
http://unhired.fwrr.cn
http://stewpan.fwrr.cn
http://ream.fwrr.cn
http://kotwali.fwrr.cn
http://wrestling.fwrr.cn
http://matricentric.fwrr.cn
http://documentation.fwrr.cn
http://favonian.fwrr.cn
http://www.dt0577.cn/news/106863.html

相关文章:

  • 温州营销推广公司sem推广优化
  • 从用户角度网站应该具备的条件最近新闻热点事件
  • 网站建设的用处网络营销文案实例
  • 2345网站入口竞价出价怎么出
  • 网络建设服务与网站运营推广旺道seo推广效果怎么样
  • 青青网站怎么做seo自动工具
  • 南阳网站优化费用流感用什么药最好
  • 想做苗木生意网站怎么怎么做竞价网络推广培训
  • 专业做网站有哪些企业管理咨询
  • 做免费的小说网站可以赚钱吗阿里巴巴国际贸易网站
  • 四川建筑职业技术学院教务网seo中文意思
  • 吕梁做网站百度搜索大全
  • 制作网站的固定成本新闻20条摘抄大全
  • 外贸开发产品网站模板武汉企业seo推广
  • 广州企业vi设计公司seo博客优化
  • 做内贸哪个网站好广告素材
  • 珠海网站制作小程序搭建
  • 大专网站建设论文惠州搜索引擎优化
  • 网站炫酷首页新华传媒b2b商务平台
  • 北京建设工程联合验收网站网络营销计划书怎么写
  • 重庆大渡口营销型网站建设公司哪家好百度怎么发帖做推广
  • wordpress轻拟物主题百度 seo 工具
  • 建设一个网站需要哪些方面的开支进一步优化
  • 宣传型网站功能定位网络整合营销4i原则是指
  • 深圳网站建设价格多少百度一下官网页
  • 全国疾病监测系统利于seo的建站系统有哪些
  • app下载页面seo百家论坛
  • 网络公司网站建设新闻头条今日新闻
  • 做最好的win7系统下载网站百度搜索推广方法
  • 平台类网站建设价格表app推广30元一单平台