设计模式之ChainOfResponsibility模式(学习笔记)

  • 相关资料
在  面向对象程式设计 里,  责任链模式 是一种 软件设计模式 ,它包含了一些命令对象和一系列的处理对象。每一个处理对象决定它能处理哪些命令对象,它也知道如何将它不能处理的命令对象传递给该链中的下一个处理对象。该模式还描述了往该处理链的末尾添加新的处理对象的方法。
  • 问题描述
现实生活中,如果我们想完成一件事,可能要经过几番周折。
比如新生入学这件事。
我们刚进学校
  1. 有志愿者引导我们去系导员办公室。
  2. 导员处理完我们通知我们去找寝室管理员。
  3. 寝室管理员处理完我们通知我们去找收发室老大爷。
  4. 收发室老大爷处理完我们告诉我们完事了。
  5. 入住成功
他们每个有都有自己的责任(要处理的事情),也能用某种方法把自己处理不了的事情交给别人处理,像一条链子一样。

像这样的事情,我们就可以用责任链模式来处理。

太过简单的责任链模式,这里就不给大家演示Demo了

  • Filter与Interceptor
其实无论是Filter,还是Interceptor都算是责任链模式的一种实现。
这种可自由组合,自由拆卸的拦截器。处理一些问题确实很方便。






下面的Demo来演示一下


public class JServlet {
	public void doPost(JRequest request,JResponse response) {
		System.out.println("doPost");
	}
}
class JRequest{
	
}
class JResponse{
	
}

public interface JFilterChain {
	void doFilter(JRequest request,JResponse response);
}

public class MyFilterChain implements JFilterChain{
	private List<JFilter> filters = new LinkedList<JFilter>();
	private JServlet servlet;
	private int index = -1;
	
	
	public JServlet getServlet() {
		return servlet;
	}


	public void setServlet(JServlet servlet) {
		this.servlet = servlet;
	}
	public void addFilter(JFilter filter){
		this.filters.add(filter);
	}


	@Override
	public void doFilter(JRequest request, JResponse response) {
		index++;
		if (index == filters.size()){
			servlet.doPost(request,response);
		} else {
			this.filters.get(index).doFilter(request, response, this);
		}
	}

}

public interface JFilter {
	void doFilter(JRequest request,JResponse response,JFilterChain filterChain);
}

public class Filter1 implements JFilter{

	@Override
	public void doFilter(JRequest request, JResponse response,
			JFilterChain filterChain) {
			System.out.println("1");
			filterChain.doFilter(request, response);
			System.out.println("-1");
	}

}

class Filter2 implements JFilter{

	@Override
	public void doFilter(JRequest request, JResponse response,
			JFilterChain filterChain) {
			System.out.println("2");
			filterChain.doFilter(request, response);
			System.out.println("-2");
	}

}

class Filter3 implements JFilter{

	@Override
	public void doFilter(JRequest request, JResponse response,
			JFilterChain filterChain) {
			System.out.println("3");
			filterChain.doFilter(request, response);
			System.out.println("-3");
	}

}

public class JTest {
	public static void main(String[] args) {
		MyFilterChain fc = new MyFilterChain();
		fc.addFilter(new Filter1());
		fc.addFilter(new Filter2());
		fc.addFilter(new Filter3());
		fc.setServlet(new JServlet());
		fc.doFilter(new JRequest(),new  JResponse());
		
	}
}

运行结果:
1
2
3
doPost
-3
-2
-1
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值