您的位置:首页 > 初中作文 > 初中日记 >

春斋

时间:2017-12-26 10:35:35来源:杰瑞文章网点击:作文字数:400字
算是读书笔记吧 极客时间--设计模式之美 什么是职责链模式 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. 将请求的发送和接收解耦,让多个接收对象都有机会处理这个请求。将这些接收对象串成一条链,并沿着这条链传递这个请求,直到链上的某个接收对象能够处理它为止 举一个形象的例子,每一层都会过滤掉不同的杂质 对应到代码中,可以看做是在发现某条信息中含有违规信息,就终止当条信息继续传递。 而职责链,就是讲这一层一层的筛选,交给一个一个处理器对象进行处理。 职责链模式如何实现 如果不使用职责链模式 正常情况下,我们会这样设计 public class SensitiveWordFilter { // return true if content doesn't contain sensitive words. public boolean filter(Content content) { if (!filterSexyWord(content)) { return false; } if (!filterAdsWord(content)) { return false; } if (!filterPoliticalWord(content)) { return false; } return true; } private boolean filterSexyWord(Content content) { //.... } private boolean filterAdsWord(Content content) { //... } private boolean filterPoliticalWord(Content content) { //... } } 其实很多时候我们都是这样做的,因为这些需求经常会变化。 但是如果要设计一个稳定的框架,我们当然不希望所有逻辑都耦合在这一个方法,甚至文件里。 业务方想要更改一个判断,要修改框架类。这明显违背了开闭原则。 用链表方式实现职责链 通过当前处理器对象调用next,来实现链式调用 每个处理器就是一个节点 public abstract class Handler { protected Handler nextHandler = null; public void setSuccessor(Handler nextHandler) { this.nextHandler = nextHandler; } public abstract void handle(); } public class HandlerA extends Handler { @Override public boolean handle() { boolean handled = false; //... if (!handled && 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(); } } 当然,也可以通过在模板方法里调用next,简化编码流程 public abstract class Handler { protected Handler nextHandler = null; public void setSuccessor(Handler nextHandler) { this.nextHandler = nextHandler; } public final void handle() { doHandle(); if (successor != null) { nextHandler.handle(); } } protected abstract void doHandle(); } public class HandlerA extends Handler { @Override protected void doHandle() { //... } } 用数组方式实现职责链 将处理器对象存储在主链的数组容器中,由主链对象依次调用节点 public class SensitiveWordFilterChain { private List filters = new ArrayList<>(); public void addFilter(SensitiveWordFilter filter) { this.filters.add(filter); } // return true if content doesn't contain sensitive words. public boolean filter(Content content) { for (SensitiveWordFilter filter : filters) { if (!filter.doFilter(content)) { return false; } } return true; } } 职责链模式的变体 经典的职责链模式 一旦某个处理器能处理这个请求,就不会继续将请求传递给后续的处理器了 职责链模式的变体 请求不会中途终止传递,而是会被所有的处理器都处理一遍。
作文投稿

春斋一文由杰瑞文章网免费提供,本站为公益性作文网站,此作文为网上收集或网友提供,版权归原作者所有,如果侵犯了您的权益,请及时与我们联系,我们会立即删除!

杰瑞文章网友情提示:请不要直接抄作文用来交作业。你可以学习、借鉴、期待你写出更好的作文。

春斋相关的作文:

    无相关信息

说说你对这篇作文的看法吧