Java Responsibility FilterChain

一、目标

增加filterchain功能

二、代码

1.Filter.java

1 public interface Filter {
2     public String doFilter(String str);
3 }

2.FilterChain.java

 1 import java.util.ArrayList;
 2 import java.util.List;
 3
 4 public class FilterChain implements Filter {
 5
 6     private List<Filter> filters = new ArrayList<Filter>();
 7
 8     public String doFilter(String str) {
 9         for(Filter f : filters){
10             str = f.doFilter(str);
11         }
12         return str;
13     }
14
15     //把函数的返回值设为FilterChain,返回this,就能方便链式编写代码
16     public FilterChain addFilter(Filter filter) {
17         filters.add(filter);
18         return this;
19     }
20
21 }

3.HTMLFilter.java

1 public class HTMLFilter implements Filter {
2
3     @Override
4     public String doFilter(String str) {
5         return str.replace(‘<‘, ‘[‘).replace(">", "]");
6     }
7
8 }

4.SensitiveFilter.java

1 public class SensitiveFilter implements Filter {
2
3     @Override
4     public String doFilter(String str) {
5         return str.replace("敏感", "幸福");
6     }
7
8 }

5.MsgProcessor.java

 1 public class MsgProcessor {
 2
 3     //private List<Filter> filters = new ArrayList<Filter>();
 4     FilterChain filterChain;
 5     private String msg;
 6
 7     public FilterChain getFilterChain() {
 8         return filterChain;
 9     }
10
11     public void setFilterChain(FilterChain filterChain) {
12         this.filterChain = filterChain;
13     }
14
15
16     public String getMsg() {
17         return msg;
18     }
19
20     public void setMsg(String msg) {
21         this.msg = msg;
22     }
23
24     public String process() {
25         return filterChain.doFilter(msg);
26     }
27 }

6.Test.java

 1 public class Test {
 2
 3     @org.junit.Test
 4     public void testFilter(){
 5
 6         MsgProcessor processor = new MsgProcessor();
 7
 8         String msg = "<html>敏感字眼</html>";
 9         processor.setMsg(msg);
10
11         FilterChain fc1 = new FilterChain();
12         fc1.addFilter(new HTMLFilter());
13
14         FilterChain fc2 = new FilterChain();
15         fc2.addFilter(new SensitiveFilter());
16
17         //由于FilterChain实现了Filter接口,所以FilterChain同时也是Filter,所以可以调用addFilter增加fc2
18         fc1.addFilter(fc2);
19
20         processor.setFilterChain(fc1);
21
22         String result = processor.process();
23         System.out.println(result);
24
25     }
26
27 }

三、运行结果

时间: 2024-11-08 10:31:43

Java Responsibility FilterChain的相关文章

Java Responsibility模式 模拟处理Reques Response

一.目标 1.用Filter模拟处理Request.Response 2.思路细节技巧: (1)Filter的doFilter方法改为doFilter(Request,Resopnse,FilterChain),有FilterChain引用,为利用FilterChain调用下一个Filter做准备 (2)FilterChain继承Filter,这样,FilterChain既是FilterChain又是Filter,那么FilterChain就可以调用Filter的方法doFilter(Reque

第八章 拦截器机制——《跟我学Shiro》

8.1 拦截器介绍 Shiro使用了与Servlet一样的Filter接口进行扩展:所以如果对Filter不熟悉可以参考<Servlet3.1规范>http://www.iteye.com/blogs/subjects/Servlet-3-1了解Filter的工作原理.首先下图是Shiro拦截器的基础类图: 1.NameableFilter NameableFilter给Filter起个名字,如果没有设置默认就是FilterName:还记得之前的如authc吗?当我们组装拦截器链时会根据这个名

Shiro学习(8)拦截器机制

8.1 拦截器介绍 Shiro使用了与Servlet一样的Filter接口进行扩展:所以如果对Filter不熟悉可以参考<Servlet3.1规范>http://www.iteye.com/blogs/subjects/Servlet-3-1了解Filter的工作原理.首先下图是Shiro拦截器的基础类图: 1.NameableFilter NameableFilter给Filter起个名字,如果没有设置默认就是FilterName:还记得之前的如authc吗?当我们组装拦截器链时会根据这个名

shiro中拦截器机制

8.1 拦截器介绍 Shiro使用了与Servlet一样的Filter接口进行扩展:所以如果对Filter不熟悉可以参考<Servlet3.1规范>http://www.iteye.com/blogs/subjects/Servlet-3-1了解Filter的工作原理.首先下图是Shiro拦截器的基础类图: 1.NameableFilter NameableFilter给Filter起个名字,如果没有设置默认就是FilterName:还记得之前的如authc吗?当我们组装拦截器链时会根据这个名

职责链模式(Chain of Responsibility)的Java实现

职责链模式(Chain of Responsibility):使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系.将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止. 适用场景: 1.有多个的对象可以处理一个请求,哪个对象处理该请求运行时刻自动确定: 2.在不明确指定接收者的情况下,向多个对象中的一个提交一个请求: 3.处理一个请求的对象集合应被动态指定. 在大学里面当班干部,时常要向上级申请各方面的东西.譬如申请全班外出秋游,普通同学将申请表交给班长,班

JAVA设计模式(13):行为型-责任链模式(Responsibility)

定义 将能够处理同一类请求的对象连成一条链,所提交的请求沿着链传递,链上的对象逐个判断是否有能力处理该请求, 如果能则处理,如果不能则传递给链上的一个对象. 场景: 打牌时,轮流出牌 接力赛跑 大学中,奖学金审批 公司中,公文审批 开发中常见的场景: Java中,异常机制就是一种责任链模式.一个try可以对应多个catch,当第一个catch不匹配类型,则自动跳到第二个catch. Javascript语言中,事件的冒泡和捕获机制.Java语言中,事件的处理采用观察者模式. Servlet开发中

JAVA设计模式之 职责链模式【Chain of Responsibility Pattern】

一.概述 避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止.职责链模式是一种对象行为型模式. 核心在于引入一个抽象处理者类 二.适用场景 请求的链式处理,多个对象可以处理同一请求.但是具体由哪个对象来处理由运行时系统根据条件判断确定. 如请假业务场景: 三.UML类图 四.参与者 1.Handler(抽象处理者):它定义了一个处理请求的接口,一般设计为抽象类,由于不同的具体处理者处理请求的方式不同,因此在其中定义了

Java 实现责任链(Chain of Responsibility)模式

类图 /** * 抽象责任 * @author stone * */ public abstract class IFilter { private IFilter successor; public IFilter getSuccessor() { return successor; } public void setSuccessor(IFilter successor) { this.successor = successor; } public abstract void handleF

责任链模式-Chain of Responsibility(Java实现), 例1

责任链模式-Chain of Responsibility, 例1 在这种模式中,通常每个接收者都包含对另一个接收者的引用.如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推. Trouble类 本类是:待责任链来处理的问题Trouble类. 本例子较简单, Trouble只有一个int型作为待处理的编号. public class Trouble { private int number; public Trouble(int number) { this.number