//过滤器接口: Filter
package com.bjsxt.chain;
public interface Filter {
public void doFilter(Request request, Response response);
}
//实现类1 : Fillter1
package com.bjsxt.chain;
public class Filter1 implements Filter {
public void doFilter(Request request, Response response) {
String str = request.getRequestParameter();
str += " pass filter1 ";
request.setRequestParameter(str);
}
}
//实现类2
package com.bjsxt.chain;
public class Filter2 implements Filter {
public void doFilter(Request request, Response response) {
String str = request.getRequestParameter();
str += " pass filter2 ";
request.setRequestParameter(str);
}
}
//过滤链
import java.util.ArrayList;
import java.util.List;
public class Filterchain implements Filter {
List<Filter> filters = new ArrayList<Filter>();
public Filterchain addFilter(Filter filter) {
filters.add(filter);
return this;
}
public void doFilter(Request request, Response response) {
for (Filter f : filters) {
f.doFilter(request, response);
}
}
}
//模拟request
package com.bjsxt.chain;
public class Request {
private String requestParameter = "";
public String getRequestParameter() {
return requestParameter;
}
public void setRequestParameter(String requestParameter) {
this.requestParameter = requestParameter;
}
}
//模拟response
package com.bjsxt.chain;
public class Response {
private String responseParameter;
public String getResponseParameter() {
return responseParameter;
}
public void setResponseParameter(String responseParameter) {
this.responseParameter = responseParameter;
}
}
//测试主类
package com.bjsxt.chain;
public class MainClass {
public static void main(String[] args) {
Request request = new Request();
Response response = new Response();
Filterchain chain1 = new Filterchain();
chain1.addFilter(new Filter1());
Filterchain chain2 = new Filterchain();
chain2.addFilter(new Filter2());
chain1.addFilter(chain2);
chain1.doFilter(request, response);
System.out.println(request.getRequestParameter());
}
}
//改进后的过滤器
//过滤器接口类
package com.bjsxt.chain;
public interface Filter {
public void doFilter(Request request, Response response, FilterChain filterChain);
}
//过滤器实现类1
package com.bjsxt.chain;
public class Filter1 implements Filter {
public void doFilter(Request request, Response response, FilterChain filterChain) {
String str = request.getRequestParameter();
str += "request pass filter1 ";
request.setRequestParameter(str);
filterChain.doFilter(request, response, filterChain);
str = response.getResponseParameter();
str += "response pass filter1";
response.setResponseParameter(str);
}
}
//过滤器实现类2
package com.bjsxt.chain;
public class Filter2 implements Filter {
public void doFilter(Request request, Response response, FilterChain filterChain) {
String str = request.getRequestParameter();
str += "request pass filter2 ";
request.setRequestParameter(str);
filterChain.doFilter(request, response, filterChain);
str = response.getResponseParameter();
str += "response pass filter2";
response.setResponseParameter(str);
}
}
过滤器链
package com.bjsxt.chain;
import java.util.ArrayList;
import java.util.List;
import java.util.Stack;
public class FilterChain implements Filter {
List<Filter> filters = new ArrayList<Filter>();
Stack<Filter> stack = new Stack<Filter>();
private int i = 0;
public FilterChain addFilter(Filter filter) {
filters.add(filter);
return this;
}
public void doFilter(Request request, Response response, FilterChain filterChain) {
if (i == filters.size()) return;
Filter filter = filters.get(i);
i++;
filter.doFilter(request, response, filterChain);
}
}
//测试主类
package com.bjsxt.chain;
public class MainClass {
public static void main(String[] args) {
Request request = new Request();
Response response = new Response();
FilterChain chain1 = new FilterChain();
chain1.addFilter(new Filter1())
.addFilter(new Filter2());
chain1.doFilter(request, response, chain1);
System.out.println(request.getRequestParameter());
System.out.println(response.getResponseParameter());
}
分享到:
相关推荐
在Java中,责任链模式可以帮助我们实现松耦合,使得请求处理者与请求发起者之间无需直接交互,同时也允许动态地增加或修改处理请求的对象。 责任链模式的主要组成部分包括: 1. **处理者(Handler)**:这是链上的...
责任链模式是一种设计模式,它在Java编程中广泛应用于创建可扩展和灵活的系统。该模式的核心思想是将处理请求的过程分解为一系列相互链接的处理对象,形成一条处理链。当一个请求进入链条时,它会沿着链路传递,每个...
### 深入浅出JAVA责任链模式 #### 一、引言 责任链模式是一种在软件设计领域中常见的设计模式之一,它主要用于处理请求的传递过程,通过一系列的处理者对象来完成请求的处理任务。本文将详细介绍JAVA中的责任链...
设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段...
以下是关于JAVA设计模式中提及的四种模式——工厂模式、代理模式、迭代器模式以及责任链模式的详细说明。 1. **工厂模式**:工厂模式是一种创建型设计模式,它提供了一种创建对象的最佳方式。在工厂模式中,当创建...
在Java中,通过责任链模式,我们可以将多个处理者对象串联起来,每个处理者都有机会处理请求,或者将请求传递给下一个处理者。这种模式的优点在于解耦了发送者和接收者,使得系统更具灵活性,能够添加、删除或改变...
本篇将探讨两种重要的行为设计模式:责任链模式(Chain of Responsibility Pattern)和状态模式(State Pattern)。 **责任链模式**是一种使多个对象都有机会处理请求的模式,避免请求发送者与接收者之间的耦合。在...
让我们深入探讨一下责任链模式的概念、工作原理以及如何用Java来实现它。 责任链模式的核心思想是将请求的发送者和接收者解耦,发送者只需要知道链的存在,而不需要了解链上的具体处理者。每个处理者对象都包含对下...
Java 责任链模式详解 责任链模式(Chain of Responsibility Pattern)是一种行为设计模式,它允许将请求沿着处理链进行传递,直到有一个处理程序处理它为止。在 Java 中实现责任链模式通常需要以下几个步骤: 定义...
责任链模式(Chain of Responsibility Pattern)是设计模式中的一种行为模式,它的主要目的是将请求的发送者和接收者解耦,使得多个对象有机会处理这个请求,形成一条责任链。在这个链上,请求会沿着链传递,直到有...
Java责任链模式模板代码分享 Java责任链模式是一种常见的设计模式,用于处理请求的处理和分发。它允许多个处理者对请求进行处理,并且可以根据需要将请求传递给下一个处理者。本文将分享一个Java责任链模式模板代码...
Java责任链模式定义与用法分析 Java责任链模式是指在处理某个请求时,将多个处理对象连接成一条链,每个处理对象都有机会处理该请求,直到有一个对象处理该请求为止。这种模式可以避免请求的发送者和接受者之间的...
在“java设计模式之责任链模式”的主题中,我们可以深入探讨如何在实际项目中应用责任链模式,包括但不限于以下方面: 1. **代码结构优化**:通过责任链模式,可以使代码结构更加清晰,降低类间的耦合度。 2. **可...
在《Head First Design Patterns》文中是这么介绍责任链模式的,“通过责任链模式,你可以为某个请求创建一个对象链。每个对象依次检查此请求,并对其进行处理,或者将它传给链中的下一个对象”,这句话已经很好了解...
责任链模式是一种行为设计模式,它允许将请求沿着处理者对象的链进行传递,直到某个对象能够处理这个请求。在Java中,这种模式常用于事件处理或者分层处理系统,例如在Spring框架的AOP切面处理中就有所体现。 在...
2 责任链模式 3 策略模式 4 模板方法模式 5 工厂方法模式 6 抽象工厂模式 7 建造者模式 8 代理模式 9 装饰模式 10 原型模式 11 委派模式 12 适配器模式 设计模式综合运用 1 门面+模版方法+责任链+策略 2 门面+模版...
责任链模式(Chain of Responsibility)的目标是使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递请求,直到有一个对象处理它为止。 在处理用户的...
### JAVA责任链与命令模式详解 #### 一、引言 设计模式是在软件工程领域内广泛应用的一种编程思想,它能够帮助开发者解决常见的编程难题。在众多设计模式中,行为模式是一大类重要的模式,它主要关注于如何描述...
### Java设计模式详解:职责链模式 #### 行为型模式概述 行为型设计模式着重于定义对象间的职责分配及算法的抽象化。不同于结构型模式关注类和对象的组合,行为型模式更注重对象之间的交互与职责划分,强调的是在...