一、前话
因为想要实现一个简单过滤的功能,又加上过滤的类别比较多。当时第一次写的时候我把方法里面写了好多个list参数,一次性实现过滤,但是感觉太凌乱了、感觉好别扭、并且额外添加一些过滤的修改也很麻烦,要改很多东西。然后就百度了很多,觉得用责任链这个去实现过滤我觉得挺好的。想做个笔记吧,欢迎吐槽
二、责任链的理解
责任链模式是一种对象的行为模式。在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求,或者处理到最后。这使得可以动态地重新组织和分配责任。
我理解链有这些特性:1.有下环的一个链接。
2.链接可以随意的组合(组合很灵活),也可以随意的切断了。
优点:这样的话我觉得整个流程很清晰,扩展和组织我觉得也很好
缺点:当链条长的话中间可能有一部分是没用的,配置也可以形成死链
三、文件过滤的链条
我的基本思路是:1.遍历所有的文件得到一个list
|
2.过滤得到一些匹配后缀文件
|
3.过滤得到一些日期范围
|
.............版本信息、其他的一些属性......................
==============================================================
我的这个链是一走到底。(过滤顺序可以随便配置了)
但是过滤的属性内容有时候不定:例如后缀了这些”.exe/.txt"并且属性是动态的
当时想通过xml配置过滤类路径去反射,动态的过滤配置的?但是实例化参数感觉不好弄,就先放下了。
这算是第一次真正的去找一个设计模式实现想要的东西。
1.定义了一个抽象类
public abstract class FindFiles{ private FindFiles nextFilter; //next的get/set方法 public FindFiles getNextFilter(){return ..} public void getNextFilter(){..} //判断next是否存在 public bool isNext(){nextFilter==null?false:true;} //主方法 public abstract List<T>getMatchFileList(List<T> fileList); }
2.就是属性继承了实现方法
public SuffixsFilter extends FindFiles{ private List<string>suffixList; get/set public List<T>getMatchFileList(List<T> fileList){ 1.把不符合要求的移除掉。 2.if(isNext()){ return nextFilter.getMatchFileList(..); }else{ return fileList; } } }
好处:想在添加新的过滤方案可以立即加进去,要改动的地方就很少了。
四、处理情况
因为用的可能是过滤情况,所以处理就一路狂奔了。
另一些要求例如权限等级的访问等也可以这样处理:当前能处理的就处理,处理不了的往下(级别高)发送中间充当一个传达的作用。
相关推荐
JAVA-设计模式-行为型模式-责任链模式
c++设计模式-行为型模式-责任链模式;qt工程;c++简单源码; 责任链(Chain of Responsibility)模式的定义:为了避免请求发送者与多个请求处理者耦合在一起,于是将所有请求的处理者通过前一对象记住其下一个对象的...
java常用设计模式-责任链模式
设计模式专题之(十五)责任链模式---设计模式责任链模式示例代码(python--c++)
ios平台中通过最简单的代码讲解责任链模式,可在博客http://blog.sina.com.cn/s/blog_161d504630102wxis.html中查看简单解释
设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段...
设计模式之责任链模式源码 设计模式之责任链模式源码 设计模式之责任链模式源码
设计模式11-行为模式-责任链、命令模式 设计模式12-解释器模式 设计模式13-迭代器模式 设计模式14-中介者模式、备忘录模式 设计模式15-观察者模式、状态模式 设计模式16-策略模式、模板方法、访问者 此PPT实例便于...
Handler后面的successor表示的是由一条链...责任链模式代码实现 首先我们需要定义一个接口,之后的处理人都要实现这个接口,因为是个链表,使用我们要指定后继,因为Java的多态所以我们只需要使用PriceHandler就好了。
创建型模式,共五种:工厂方法模式、抽象工厂模式、...行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。
设计模式之责任链模式Java版本实现和UML类图设计
JAVA 设计模式: 工厂模式 代理模式 迭代模式 责任链模式 源码
NULL 博文链接:https://linkcqu.iteye.com/blog/355806
23种设计模式的特点定义、优缺点、使用场景,源码中...行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。
结构型模式 :适配器模式、装饰器模式、代理模式、外观模式、...行为型模式 :策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式 ;
【设计模式】之责任链模式责任链模式概念责任链,顾名思义,就是用来处理相关事务责任的一条执行链,执行链上有多个节点,每个节点都有机会(条件匹配)处理请求事务,如果
Handler:定义处理请求的接口,并且实现后继链(successor)public abstract class Handler {public class
2 责任链模式 3 策略模式 4 模板方法模式 5 工厂方法模式 6 抽象工厂模式 7 建造者模式 8 代理模式 9 装饰模式 10 原型模式 11 委派模式 12 适配器模式 设计模式综合运用 1 门面+模版方法+责任链+策略 2 门面+模版...
cpp代码-设计模式-责任链模式