网络上有不少关于介绍设计模式的文章,关于设计模式,也有不少的书本。描述的惟妙惟肖。但凡新的事物,好的思想。吃别人的现成饭,总是有种填鸭式的被动。只有自己领悟的东西,才是自己的。这里闲着没事,写点乱起七八糟的东西,一来为交流思想,一来希望能为新人带来点不一样的东西。写的不好,见谅少拍砖。
自己也是新人过来的,当新人提到模式,或许这些新的名词,多多少少有点觉得很有权威,科技含量充足。咱们国家的改革开放,成功经验,啥的,也喜欢套用这样的词,曾几何时,沸沸扬扬的“广东模式”、“重庆模式”,在合适的基础上,有所成功,变成了推广与成功的典型。百度一下模式一词,模式(Pattern)其实就是解决某一类问题的方法论。把解决某类问题的方法总结归纳到理论高度,那就是模式。模式是一种指导,在一个良好的指导下,有助于你完成任务,有助于你作出一个优良的设计方案,达到事半功倍的效果。而且会得到解决问题的最佳办法。
经济的发展,有发展模式。对于我们在代码上操刀的,就有相应的设计模式。说白了。模式是用来解决问题的,并取得成效的用以推广的。核心的东西,其实也并不是很神秘的,不是在高坛上下不来的。下面我们就收拾我们的心情,从责任链这一模式,扯起。
责任链(Chain of Responsibility),我不想教条的把定义解释给大家听。光看字义,责任,是需要做事情的,是需要承担的义务的,我们叫责任;链,我们想到一连串的东西:链条、数据结构中有链式结构、甚至你都会想到三国杀的铁索连环。我们可以简单的认为责任链就是 做事情组成一个链式结构。就像春节一样,大家排着长长的队伍,要做的事情,就是买票。还有个比较搞笑的例子。我记得香港以前有部电影,叫《最佳女婿》,好像还是年轻的歌神主演的。讲的是兄弟三跟一个女的一夜激情之后,女子意外怀孕,不知道谁才是孩子真正的爸爸,这时三兄弟都争着想对女方负责任,后来女方的老爸假意说娃生病了,要治疗需要花很多钱。后来一个平时就老实巴交的男子敢于承担责任,最终经受住考验,嫁给了他。这个我认为已经是很贴切的而生动的例子。如果还可以再贴切一点,就是这么一幕,电影里三兄弟一字排开,女方的老爸先问第一个,“你愿意做这个病孩子的父亲吗?”老大不语,pass掉,老爸再问第二个,pass掉,再问第三个,他答应了,好,敢于承担责任,好!那你就是最佳女婿了。三个人组成了一个链,都做着同样的事情,就是敢不敢承担责任。在代码中,我们就可以把这里共同要做的事情抽象成一个方法。这就是一个责任链模式。
扯到这里,有些开发者,可能就会考虑到J2EE开发时,常会用到过滤器的。没错,这就是责任链的应用。
public class TestFilter implements Filter{
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
chain.doFilter(request, response);
}
public void destroy() {
}
public void init(FilterConfig filterConfig) throws ServletException {
}
}
这里的dofilter方法就是要的我们所说的“责任”,他在链条中传递,不是所有人都能负责,就像上面的三兄弟,不是每个人都能当人家的女婿的。
撇开这里,我们再举一例,我们在学习网络的时候,我们知道网络协议可以广义的分为四层。从应用层->网络层->数据链路层->物理层。每一层都有对应的协议。我们分发一条数据,都是从上一层吧数据包加上协议头和协议尾进行数据包封装后,交由下一层。下一层再进行相应的处理,一直到数据分发在介质上传递。很简单,这里传递的人责任就是“数据包”。经过层层的封装,就变成了最后的数据。每一层组成了一个链路。
既然说开去,我们就大胆一点,我们用java的iterator,迭代器是不是可以认为就是一个责任链。每一次迭代,就是在传递“责任”。然后你又想了,那么递归函数是不是也是一个呢?然后你会想到链式的线性结构,会不会是一个呢?
到这里,你已经开始接触真相了。责任链说到底就是一个链式的线性结构。每个结构中的对象都做着同样的事情。
然后你会想到什么?类的加载器?什么时候加载本地的类,什么时候加载类库,什么时候加载网络的,他们之间有个顺序,就构成了java的加载机制。加载了,后面的类就不再加载了,这样就保障了java的安全性。java的异常捕获? 为什么一定要先捕获子类的,catch的时候为什么一定是从特定的异常开始,最后才变成一般的异常,也是爷爷级的异常Exception呢?捕获是个“责任”,在父子继承关系组成的链路中传递。这就成了java的异常捕获机制。浏览器的事件机制也同样的。抛开语言级别的,你可能还会想到什么呢?工作流?每个节点都有自己的任务要执行,在预定义的流程中传递。spring的拦截器,等等等等。
分享到:
相关推荐
中美医疗订阅服务行业比较:从Teladoc和平安好医生说开去-0427-中信建投-25页.pdf
总的来说,《由马云正传说开去》这篇论文全面剖析了马云的个人特质、商业策略和领导智慧,为读者提供了一个深入了解这位传奇企业家及其企业的窗口,同时也为创业者和企业管理者提供了宝贵的学习素材。
【《从拴象说开去》阅读及答案】从拴象说开去阅读答案.docx
这篇报告主要探讨的是中国啤酒行业的发展趋势,特别是通过分析福建市场的现状来预判全国啤酒市场竞争的未来走向。报告指出,福建啤酒市场因其重要的地理位置和庞大的市场规模,历来是各大啤酒巨头争夺的重点,也是...
《玻纤行业系列分析报告之三:从最新数据说开去,对玻纤行业需求的再验证》 玻璃纤维(简称“玻纤”)作为一种重要的无机非金属材料,广泛应用于建筑、汽车、电子电气、风能、航空航天等多个领域。本报告主要针对玻...
从流程优化的一个经典表格说开去.doc
《从流程优化的一个经典格说开去》这篇文章深入探讨了企业流程优化的重要性和具体方法。流程优化是提升企业效率和竞争力的关键,它涉及到对现有工作流程的细致分析和改进。 文章提到,流程优化首先要深入了解实际...
2. 智能汽车相关产业链公司的成长空间:报告认为,随着自动驾驶技术的发展,智能汽车相关产业链公司将有较大成长空间,包括整车、零部件(芯片、激光雷达、线控部件等)子行业标的。 3. 中金汽车行业分析员对汽车...
【20210228】汽车行业:Robotaxi深度,无人驾驶赋能,构建智慧生活_由智行者科技谈开去-中金公司_38页.pdf
报告也提出了一系列核心推荐的投资建议,包括青岛啤酒股份(H股)、百威亚太、重庆啤酒和珠江啤酒,并建议关注华润啤酒、青岛啤酒(A股)、燕京啤酒(U8的高成长)及惠泉啤酒(未覆盖)。报告在盈利预测与估值方面,...
### AMT咨询观点之:从流程优化的一个经典表格说开去 #### 一、引言 随着企业竞争环境的日益激烈以及市场需求的不断变化,流程优化成为提升企业竞争力的重要手段之一。AMT咨询在此篇文章中提出了一个核心观点:...
机器人新闻的核心是自然语言生成技术,它依赖于大数据的支撑,通过预设的模板和算法形成模式,从而实现对所搜集数据的加工处理和新闻文本的自动生成。整个流程包括数据采集、数据加工、自动写稿、编辑签发等环节,...
由深圳地铁4A标段施工说开去.pptx
### iOS DevCamp幻灯片分享:从知乎iPhone端重构说开去 #### 一、议题背景及重要性 随着移动互联网的发展,越来越多的社交产品选择Web作为主要的技术栈,这主要是因为Web技术能够快速响应市场变化,实现产品的快速...
05 白话容器基础(一):从进程说开去.pdf
总的来说,教学改革是一项系统工程,涉及教学理念的更新、教学方法的创新以及教育环境的优化。只有当这些方面都得到改进,我们才能真正实现从应试教育到素质教育的转变,让每一个学生都能在学习中找到乐趣,发挥自己...
苏教版九年级上五单元作文:从国土资源说开去.docx