责任量模式
1、定义
责任链模式是一种对象的行为模式。在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织和分配责任。
2、结构图
3、代码
(1)过滤器接口filter
public interface Filter { public void doFilter(FilterChain chain); }
(2)日志过滤器LogFilter
public class LogFilter implements Filter { @Override public void doFilter(FilterChain chain) { System.out.println("-----------logfilter---in---"); chain.doFilter(); System.out.println("-----------logfilter---out---"); } }
(3)安全过滤器SecurityFilter
public class SecurityFilter implements Filter{ @Override public void doFilter(FilterChain chain) { System.out.println("-----------SecurityFilter---in---"); chain.doFilter(); System.out.println("-----------SecurityFilter---out---"); } }
(4)链FilterChain
public class FilterChain{ public FilterChain(Controller controller) { super(); this.controller = controller; } private Controller controller; private List<Filter> filterList = new ArrayList<Filter>(); private int index = -1; public void doFilter() { index++; if(index < filterList.size()){ filterList.get(index).doFilter(this); }else if(index == filterList.size()){ controller.execute(); } } public FilterChain addFilter(Filter filter){ filterList.add(filter); return this; } public void removeFilter(Filter filter){ filterList.remove(filter); } }
(5)controller接口
public interface Controller { public void execute(); }
(6)请求controller实现
public class ConcreteController implements Controller{ @Override public void execute() { System.out.println("执行controller请求"); } }
(7)客户端client
public class Client { public static void main(String[] args) { FilterChain chain = new FilterChain(new ConcreteController()); chain.addFilter(new LogFilter()).addFilter(new SecurityFilter()); chain.doFilter(); } }
4、总结
在责任量模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织链和分配责任。
责任链模式的主要优点在于可以降低系统的耦合度,简化对象的相互连接,同时增强给对象指派职责的灵活性,增加新的请求处理类也很方便;其主要缺点在于不能保证请求一定被接收,且对于比较长的职责链,请求的处理可能涉及到多个处理对象,系统性能将受到一定影响,而且在进行代码调试时不太方便。
相关推荐
设计模式之责任链模式源码 设计模式之责任链模式源码 设计模式之责任链模式源码
spring责任链模式详解,包含项目中应用
JAVA 设计模式: 工厂模式 代理模式 迭代模式 责任链模式 源码
责任链模式代码
责任链模式demo
责任链模式.rar 责任链模式.rar 责任链模式.rar 责任链模式.rar 责任链模式.rar 责任链模式.rar 责任链模式.rar 责任链模式.rar
一、责任链模式 现有 “战士”、“班长”、“排长”、“连长”,“营长”五种角色,当有人要请假时要进行以下处理 1.只能是下级象上级请假(如“排长”只能向“连长请假”) 2.班长可以批准1天内的假期,排长批5天,...
责任链模式的小例子
设计模式之责任链模式,使用形象化例子来解释说明。
责任链模式(Chain of Responsibility)的目标是使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递请求,直到有一个对象处理它为止。 在处理用户的...
责任链模式小demo
责任链模式 C++ 实现
ios平台中通过最简单的代码讲解责任链模式,可在博客http://blog.sina.com.cn/s/blog_161d504630102wxis.html中查看简单解释
【设计模式】之责任链模式责任链模式概念责任链,顾名思义,就是用来处理相关事务责任的一条执行链,执行链上有多个节点,每个节点都有机会(条件匹配)处理请求事务,如果
设计模式之责任链模式Java版本实现和UML类图设计
设计模式C++学习之责任链模式(Chain of Responsibility)
责任链模式示例源码下载,有简单的设计思想的体现,可以用来学习
开始击鼓时,花束就开始依次传递,鼓声一落,如果花束在某人手中,则该人就得饮酒,这是很典型的行为责任链模式。 State模式主要解决的是在开发中时常遇到的根据不同的状态需要进行不同的处理操作的问题,而这样的...
责任链模式(Chain) 用意:避免请求发送者与接受者耦合在一起,让多个对象连接成一条链,并且沿关这条链传递请求,直至有对象处理他为止。