设计模式之ChainOfResponsibility模式(学习笔记)
2012-02-11 21:23
519 查看
相关资料
在 面向对象程式设计里, 责任链模式是一种软件设计模式,它包含了一些命令对象和一系列的处理对象。每一个处理对象决定它能处理哪些命令对象,它也知道如何将它不能处理的命令对象传递给该链中的下一个处理对象。该模式还描述了往该处理链的末尾添加新的处理对象的方法。
问题描述
现实生活中,如果我们想完成一件事,可能要经过几番周折。
比如新生入学这件事。
我们刚进学校
有志愿者引导我们去系导员办公室。
导员处理完我们通知我们去找寝室管理员。
寝室管理员处理完我们通知我们去找收发室老大爷。
收发室老大爷处理完我们告诉我们完事了。
入住成功
他们每个有都有自己的责任(要处理的事情),也能用某种方法把自己处理不了的事情交给别人处理,像一条链子一样。
像这样的事情,我们就可以用责任链模式来处理。
太过简单的责任链模式,这里就不给大家演示Demo了
Filter与Interceptor
其实无论是Filter,还是Interceptor都算是责任链模式的一种实现。
这种可自由组合,自由拆卸的拦截器。处理一些问题确实很方便。
下面的Demo来演示一下
运行结果:
1
2
3
doPost
-3
-2
-1
在 面向对象程式设计里, 责任链模式是一种软件设计模式,它包含了一些命令对象和一系列的处理对象。每一个处理对象决定它能处理哪些命令对象,它也知道如何将它不能处理的命令对象传递给该链中的下一个处理对象。该模式还描述了往该处理链的末尾添加新的处理对象的方法。
问题描述
现实生活中,如果我们想完成一件事,可能要经过几番周折。
比如新生入学这件事。
我们刚进学校
有志愿者引导我们去系导员办公室。
导员处理完我们通知我们去找寝室管理员。
寝室管理员处理完我们通知我们去找收发室老大爷。
收发室老大爷处理完我们告诉我们完事了。
入住成功
他们每个有都有自己的责任(要处理的事情),也能用某种方法把自己处理不了的事情交给别人处理,像一条链子一样。
像这样的事情,我们就可以用责任链模式来处理。
太过简单的责任链模式,这里就不给大家演示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
相关文章推荐
- [学习笔记]设计模式之Chain of Responsibility
- 步步为营 .NET 设计模式学习笔记 十九、Chain of Responsibility(职责链模式)
- 【设计模式学习笔记十四】【行为模式】【职责链模式(Chain Of Responsibility)】
- 设计模式学习笔记——责任链(Chain of Responsibility)模式
- 步步为营 .NET 设计模式学习笔记 十九、Chain of Responsibility(职责链模式)
- 设计模式学习笔记之-职责链模式CHAIN OF RESPONSIBILITY
- Chain Of Responsibility——设计模式学习笔记
- 设计模式学习笔记---职责链模式chain of responsibility(Java版)
- java 设计模式学习笔记十六 chain of responsibility 职责链设计模式
- 设计模式学习笔记——Chain of Responsibility职责链模式
- 设计模式学习笔记--Chain Of Responsibility 职责链模式
- 设计模式学习笔记(十五)——Chain Of Responsibility职责链
- 设计模式学习笔记(十九)—Chain of Responsibility职责链模式
- java 设计模式学习笔记十六 chain of responsibility 职责链设计模式
- 步步为营 .NET 设计模式学习笔记 十九、Chain of Responsibility(职责链模式)
- [设计模式学习笔记]CHAIN OF RESPONSIBILITY(职责链)
- 设计模式学习笔记十四——Chain of Responsibility模式
- 【HeadFirst 设计模式学习笔记】9 迭代器模式
- 【HeadFirst 设计模式学习笔记】14 责任链模式拾零
- 设计模式学习笔记:单例模式