为什么80%的码农都做不了架构师?>>>   

职责链模式里面必须要知道的事情

用java web开发的很多同学很容易沉迷于各种框架的使用技巧,而忽略servlet的一些细节。对很多框架的设计模式很了解,却对servlet里面的设计模式知之不详。其实这个模式在servlet 2.3 的时候就已经在使用了,它就是filter chains的设计思想。

带着两个问题去学习,一个是为责任链模式模式链字体现在哪里?责任是怎么传递的?

责任链模式的UML图:

有一种向下递归的感觉,看了这个UML的感觉。

看代码的具体实现:

    public abstract class Support {private String name;private Support next;public Support(String name){this.name=name;}//这个地方有点反平时的一个思维public Support setNext(Support next){this.next=next;return next;}//这里就有责任转送的思想,加模版方法public final void support(Trouble trouble){if(resolve(trouble)){done(trouble);}else if(next!=null){next.support(trouble);//传送责任}else {fail(trouble);}}//关注子类实现protected abstract boolean resolve(Trouble trouble);protected void done(Trouble trouble){System.out.println(trouble+"is resolve by"+this);}protected void fail(Trouble trouble){System.out.println(trouble+"cant resolve by"+this);}}//第一链public class NoSupport extends Support{public NoSupport(String name) {super(name);}@Overrideprotected boolean resolve(Trouble trouble) {// TODO 自动生成的方法存根return false;}}//第二链public class LimitSupport extends Support {private int limit;public LimitSupport(String name,int limit) {super(name);this.limit=limit;// TODO 自动生成的构造函数存根}@Overrideprotected boolean resolve(Trouble trouble) {// TODO 自动生成的方法存根if(trouble.getNumber()<limit){return true;}return false;}}//如何使用责任链, 就像一个链表一样,所有相关职责串联在一起,成功的就不在传送,失败的就接着传送public class TestMain {public static void main(String args[]) {Support alice = new NoSupport("alice");Support bob = new LimitSupport("bob", 100);alice.setNext(bob);alice.support(new Trouble(10));alice.support(new Trouble(102));}
}

这个模式最中重要的思想就是,我这个链上我只关注我能不能处理这个问题,不能就转给其他人,而不是我要知道问题是怎么处理。还有一点弊端,就是中间一个环节太慢,会拖慢整个处理链的速度。就像连环船一样,有利有弊,要在恰当的地方处理而已。

转载于:https://my.oschina.net/QAAQ/blog/632600

职责链模式里面必须要知道的事情相关推荐

  1. 设计模式之职责链模式(Chain of Responsibility)摘录

    23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于如何创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而 ...

  2. 职责链模式(Chain of Responsibility)(对象行为型)

    1.概述 你去政府部门求人办事过吗?有时候你会遇到过官员踢球推责,你的问题在我这里能解决就解决,不能解决就推卸给另外个一个部门(对象).至于到底谁来解决这个问题呢?政府部门就是为了可以避免屁民的请求与 ...

  3. Python设计模式-职责链模式

    Python设计模式-职责链模式 代码基于3.5.2,代码如下; #coding:utf-8 #职责链模式class Handler():def __init__(self):self.success ...

  4. 设计模式之职责链模式、减小了因为分支带来的耦合

    1. 定义 职责链模式(Chain of Responsibility):使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系.将这个对象连成一条链,并沿着这条链传递该请求,直到有一 ...

  5. 22.Chain of Responsibility(职责链)模式

    技术交流QQ群:1027579432,欢迎你的加入! 1.Chain of Responsibility(职责链)模式动机 在软件构建过程中,一个请求可能被多个对象处理,但是每个请求在运行时只能有一个 ...

  6. 漫画设计模式:什么是 “职责链模式” ?

    作者 | 小灰 来源 | 程序员小灰(ID:chengxuyuanxiaohui) -----  第二天  ----- ------------ 在一家公司里,有三个程序员,他们的名字分别是小A.小B ...

  7. C#设计模式之二十职责链模式(Chain of Responsibility Pattern)【行为型】

    一.引言 今天我们开始讲"行为型"设计模式的第八个模式,该模式是[职责链模式],英文名称是:Chain of Responsibility Pattern.让我们看看现实生活中的例 ...

  8. 职责链模式(chain of responsibility)

    原文地址 一. 写在前面的 这么多的设计模式,我觉得职责链是我第一次看上去最简单,可是回想起来却又最复杂的一个模式. 因此,这个文章我酝酿了很久,一直也没有胆量发出来,例子也是改了又改,可是仍然觉得不 ...

  9. [转]23种经典设计模式的java实现_5_职责链模式

    对于职责链模式,一般是这么定义的:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系,即--将这些对象连成一条(处理)链,并沿着这条链传递该请求,直到这条链结束同时有一个对象处理它 ...

最新文章

  1. js事件技巧方法整合
  2. golang中的strings.HasSuffix
  3. C/C++内存分配方式与存储区
  4. Linux安装composer出现usr/bin/env: php: No such file or directory)
  5. 无埋点实现监测的真相——革新还是噱头?
  6. 电脑模拟器哪个好_电脑系统杀毒软件哪个好测评
  7. android 录音命令,音频延迟  |  Android NDK  |  Android Developers
  8. activemq和kafka的区别
  9. BP神经网络设计方法
  10. 为何使用百度输入法老是出现错别字?
  11. 华为云免费SSL域名证书申请_亲测成功
  12. 【JavaScript】相关知识学习笔记
  13. java arr转化为list
  14. Vue获取浏览器唯一标识
  15. C语言中pthread或Windows API在多线程编程中的基本应用
  16. 201771010137 赵栋《面向对象程序设计(java)》第十八周学习总结
  17. 几款支持GB28181的平台
  18. Teamcity 简单实践
  19. 亲身经历——短信诈骗
  20. 基于JAVA超市会员积分管理系统计算机毕业设计源码+系统+lw文档+部署

热门文章

  1. 双显卡单独分辨率_CPU、GPU双重碾压!AMD RX 6000系列显卡正式发布 16G显存吊锤RTX 30...
  2. grafana官方使用文档_可视化监控展示工具之Grafana,安装部署和使用
  3. java的关键字和保留字_「Java」详解常见的53个关键字
  4. HTML5文档结构主体结构 语义结构,html5组织文档结构.pdf
  5. iangularjs 模板_AngularJS 模板(Templates)
  6. python不断刷新网页_python多线程不断刷新网页的代码
  7. iOS SwiftUI篇-3 排版布局layout
  8. 样式集,小程序群聊,聊天室样式,效果图
  9. 04-dispatch_group
  10. MLeaksFinder简单实现原理