设计模式-责任链模式

#设计模式-责任链模式web

#一. 责任链模式设计模式

使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。服务器

责任链模式涉及到的角色以下所示:app

抽象处理者(Handler)角色:定义一个处理请求的抽象类。若是须要,能够定义一个方法以设定和返回对下家的引用。ide

具体处理者(ConcreteHandler)角色:具体处理者接到请求后,能够选择将请求处理掉,或者将请求传给下家。因为具体处理者持有对下家的引用,所以,若是须要,具体处理者能够访问下家。this

#二. 代码实现设计

申请活动费用小于500班长批准,小于1000辅导员批准,小于2000系主任批准。code

抽象Handlerxml

public abstract class Handler {
protected Handler handler;
public abstract boolean approve(double money);
public Handler getHandler() {
	return handler;
}
public void setHandler(Handler handler) {
	this.handler = handler;
}
}

班长Handler对象

public class HandlerA extends Handler{
@Override
public boolean approve(double money) {
	if (money<=500) {
		System.out.println("班长审核经过");
		return true;
	}else{
		System.out.println("班长传给了辅导员");
		return handler.approve(money);
	}
}
}

辅导员Handler

public class HandlerB extends Handler{

@Override
public boolean approve(double money) {
	if(money<=1000&&money>500){
		System.out.println("辅导员审核经过");
		return true;
	}else{
		System.out.println("辅导员传给了系主任");
		return handler.approve(money);
	}
}
}

系主任Handler

public class HandlerC extends Handler{
@Override
public boolean approve(double money) {
	if (money<=2000&&money>1000) {
		System.out.println("系主任审核经过");
		return true;
	}else{
		System.out.println("系主任审核未经过");
		return handler.approve(money);
	}
}
}

Client

public class Client {
public static void main(String[] args) {
	HandlerA handlerA =new HandlerA();
	HandlerB handlerB=new HandlerB();
	HandlerC handlerC=new HandlerC();
	handlerA.setHandler(handlerB);
	handlerB.setHandler(handlerC);
	handlerA.approve(1500);
}
}

输出结果:

班长传给了辅导员
	辅导员传给了系主任
	系主任审核经过

#三. Java中应用

Servlet中的过滤器

Filter接口

public interface Filter {
void init(FilterConfig var1) throws ServletException;

void doFilter(ServletRequest var1, ServletResponse var2, FilterChain var3) throws IOException, ServletException;

void destroy();
}

init方法

(1)在Web应用程序启动时,Web服务器将根据其web.xml文件的配置信息来建立每一个注册的Filter的实例对象,并将其保存在内存中。

(2)Web容器建立Filter的实例对象后,将当即调用该Filter对象的init方法。init方法在Filter生命周期中仅被执行一次,Web容器在调用init方法时,会传递一个包含Filter的配置和运行环境信息的FilterConfig对象。

doFilter方法

// 调用该方法会调用Filter链中的下一个Filter的doFilter方法,若是当前Filter是这条链中的最后一个Filter,则该方法会调用相应的Servlet的service方法。
	void doFilter(ServletRequest var1, ServletResponse var2, FilterChain var3) throws IOException, ServletException;

FilterChain接口

public interface FilterChain {
void doFilter(ServletRequest var1, ServletResponse var2) throws IOException, ServletException;
}

FilterConfig接口

//包含对FilterConfig以及FilterChain的使用
public interface FilterConfig {
String getFilterName();

ServletContext getServletContext();

String getInitParameter(String var1);

Enumeration getInitParameterNames();
}
相关文章
相关标签/搜索