java设计模式--责任链(一)
2017-12-22 11:13
330 查看
责任链也可以叫做过滤器或者拦截器,只是不同的叫法而已,都是对当前的数据在使用前做相应的处理。
阶段一:
从简单的例子入手。问题描述:有一个字符串,需要对这个字符串做一些处理,然后输出。这里我定义了一个处理器MsgDealer,用来对字符串进行相应的处理,相应的代码如下:
Main:作为数据的入口
MsgDealer:字符串的处理类
上面这段代码很简单,我只是用MsgDealer来将字符串中的“。”改成了“;”。
现在如果我想要对这个字符串做进一步的处理,那么我就要修改MsgDealer的dealMsg方法,在里面再新加处理的代码就行了。比如我还想将所有的“多”替换成“*”,那么MsgDealer就变成如下:
如果这样的处理方式很复杂,而不是这么简单的一行代码,那么我们应该想办法将这段处理代码封装起来。新建一个接口如下:
实现类如下:
此时MsgDealer变成了:
此时MsgDealer的代码有些冗余,SymbolFilter与CharacterFilter都实现了Filter借口,它们两个组合起来就相当于一个过滤器链。先写一个简单的链,用数组将这两个过滤器放在一起,代码如下:
这样如果再新增一个filter,直接在f中再新增一个就行了,同时你还可以控制过滤器的先后次序。这其实就是个简单的责任链。
未完待续。。。
以上是个人观点,如有错误,欢迎指正。
阶段一:
从简单的例子入手。问题描述:有一个字符串,需要对这个字符串做一些处理,然后输出。这里我定义了一个处理器MsgDealer,用来对字符串进行相应的处理,相应的代码如下:
Main:作为数据的入口
package chanOfResponsibility; public class Main { public static void main(String[] args) { String msg = "java知识点好多,需要花好多时间精力去学。好像出去旅游。"; MsgDealer msgDealer = new MsgDealer(); msg = msgDealer.dealMsg(msg); System.out.println(msg); } }
MsgDealer:字符串的处理类
package chanOfResponsibility; public class MsgDealer { public String dealMsg(String msg){ msg = msg.replaceAll("。", ";"); return msg; } }
上面这段代码很简单,我只是用MsgDealer来将字符串中的“。”改成了“;”。
现在如果我想要对这个字符串做进一步的处理,那么我就要修改MsgDealer的dealMsg方法,在里面再新加处理的代码就行了。比如我还想将所有的“多”替换成“*”,那么MsgDealer就变成如下:
package chanOfResponsibility; public class MsgDealer { public String dealMsg(String msg){ msg = msg.replaceAll("。", ";"); msg = msg.replaceAll("多", "*"); return msg; } }
如果这样的处理方式很复杂,而不是这么简单的一行代码,那么我们应该想办法将这段处理代码封装起来。新建一个接口如下:
package chanOfResponsibility; public interface Filter { public String doFilter(String msg); }
实现类如下:
package chanOfResponsibility; public class SymbolFilter implements Filter{ @Override public String doFilter(String msg) { msg = msg.replaceAll("。", ";"); return msg; } }
package chanOfResponsibility; public class CharacterFilter implements Filter{ @Override public String doFilter(String msg) { msg = msg.replaceAll("多", "*"); return msg; } }
此时MsgDealer变成了:
package chanOfResponsibility; public class MsgDealer { public String dealMsg(String msg){ SymbolFilter symbolFilter = new SymbolFilter(); msg = symbolFilter.doFilter(msg); CharacterFilter characterFilter = new CharacterFilter(); msg = characterFilter.doFilter(msg); return msg; } }
此时MsgDealer的代码有些冗余,SymbolFilter与CharacterFilter都实现了Filter借口,它们两个组合起来就相当于一个过滤器链。先写一个简单的链,用数组将这两个过滤器放在一起,代码如下:
package chanOfResponsibility; public class MsgDealer { public Filter[] f = new Filter[]{new SymbolFilter(),new CharacterFilter()}; public String dealMsg(String msg){ for(Filter filter : f){ msg = filter.doFilter(msg); } return msg; } }
这样如果再新增一个filter,直接在f中再新增一个就行了,同时你还可以控制过滤器的先后次序。这其实就是个简单的责任链。
未完待续。。。
以上是个人观点,如有错误,欢迎指正。
相关文章推荐
- java设计模式--责任链(二)
- java设计模式之责任链----Filter【OLD】
- java设计模式之责任链
- 【java设计模式】之 责任链(chain of resposibility)模式
- JAVA设计模式之责任链
- 【java设计模式】之 责任链(chain of resposibility)模式
- Java_设计模式之责任链一
- Java设计模式之责任链
- java设计模式--责任链(二)
- java设计模式之责任链
- java设计模式之责任
- java软件体系结构设计模式------责任链
- Java设计模式之责任链设计模式
- java设计模式---责任链设计模式
- 【java设计模式】之 责任链(chain of resposibility)模式
- Java开发中的23种设计模式详解(转)
- Java设计模式之观察者模式
- 黑马程序员-JAVA基础之单例设计模式
- java中24种设计模式及7大设计原则
- JAVA设计模式—命令模式(Command)