职责链模式里面必须要知道的事情
为什么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
职责链模式里面必须要知道的事情相关推荐
- 设计模式之职责链模式(Chain of Responsibility)摘录
23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于如何创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而 ...
- 职责链模式(Chain of Responsibility)(对象行为型)
1.概述 你去政府部门求人办事过吗?有时候你会遇到过官员踢球推责,你的问题在我这里能解决就解决,不能解决就推卸给另外个一个部门(对象).至于到底谁来解决这个问题呢?政府部门就是为了可以避免屁民的请求与 ...
- Python设计模式-职责链模式
Python设计模式-职责链模式 代码基于3.5.2,代码如下; #coding:utf-8 #职责链模式class Handler():def __init__(self):self.success ...
- 设计模式之职责链模式、减小了因为分支带来的耦合
1. 定义 职责链模式(Chain of Responsibility):使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系.将这个对象连成一条链,并沿着这条链传递该请求,直到有一 ...
- 22.Chain of Responsibility(职责链)模式
技术交流QQ群:1027579432,欢迎你的加入! 1.Chain of Responsibility(职责链)模式动机 在软件构建过程中,一个请求可能被多个对象处理,但是每个请求在运行时只能有一个 ...
- 漫画设计模式:什么是 “职责链模式” ?
作者 | 小灰 来源 | 程序员小灰(ID:chengxuyuanxiaohui) ----- 第二天 ----- ------------ 在一家公司里,有三个程序员,他们的名字分别是小A.小B ...
- C#设计模式之二十职责链模式(Chain of Responsibility Pattern)【行为型】
一.引言 今天我们开始讲"行为型"设计模式的第八个模式,该模式是[职责链模式],英文名称是:Chain of Responsibility Pattern.让我们看看现实生活中的例 ...
- 职责链模式(chain of responsibility)
原文地址 一. 写在前面的 这么多的设计模式,我觉得职责链是我第一次看上去最简单,可是回想起来却又最复杂的一个模式. 因此,这个文章我酝酿了很久,一直也没有胆量发出来,例子也是改了又改,可是仍然觉得不 ...
- [转]23种经典设计模式的java实现_5_职责链模式
对于职责链模式,一般是这么定义的:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系,即--将这些对象连成一条(处理)链,并沿着这条链传递该请求,直到这条链结束同时有一个对象处理它 ...
最新文章
- js事件技巧方法整合
- golang中的strings.HasSuffix
- C/C++内存分配方式与存储区
- Linux安装composer出现usr/bin/env: php: No such file or directory)
- 无埋点实现监测的真相——革新还是噱头?
- 电脑模拟器哪个好_电脑系统杀毒软件哪个好测评
- android 录音命令,音频延迟 | Android NDK | Android Developers
- activemq和kafka的区别
- BP神经网络设计方法
- 为何使用百度输入法老是出现错别字?
- 华为云免费SSL域名证书申请_亲测成功
- 【JavaScript】相关知识学习笔记
- java arr转化为list
- Vue获取浏览器唯一标识
- C语言中pthread或Windows API在多线程编程中的基本应用
- 201771010137 赵栋《面向对象程序设计(java)》第十八周学习总结
- 几款支持GB28181的平台
- Teamcity 简单实践
- 亲身经历——短信诈骗
- 基于JAVA超市会员积分管理系统计算机毕业设计源码+系统+lw文档+部署
热门文章
- 双显卡单独分辨率_CPU、GPU双重碾压!AMD RX 6000系列显卡正式发布 16G显存吊锤RTX 30...
- grafana官方使用文档_可视化监控展示工具之Grafana,安装部署和使用
- java的关键字和保留字_「Java」详解常见的53个关键字
- HTML5文档结构主体结构 语义结构,html5组织文档结构.pdf
- iangularjs 模板_AngularJS 模板(Templates)
- python不断刷新网页_python多线程不断刷新网页的代码
- iOS SwiftUI篇-3 排版布局layout
- 样式集,小程序群聊,聊天室样式,效果图
- 04-dispatch_group
- MLeaksFinder简单实现原理