责任链模式17
一、定义
责任链是每一个对象持有其下家的引用而形成的一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织和分配责任。
角色:
抽象处理者角色:定义出一个处理请求的接口。如果需要,接口可以定义出一个方法,以返回对下家的引用。
具体处理者角色:实现处理请求接口,判断是否自己处理还是将请求传递给下家处理。
推荐的深度好文:《JAVA与模式》26天系列—第20天—责任链模式
二、优缺点
优点:
1.实现了请求者与处理者代码分离。发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求。因此客户端与处理者之间的耦合程度降低。客户端不必在代码中加入复杂的if-else语句。
2.责任链对象之间的耦合程度低。责任链上多个的对象处理请求的代码分离,互不影响。
3.灵活性大大提高。每个责任链对象可以动态的分配下家。
缺点:
1.因为每个责任链对象都处理自己的职责,所以不一定能保证请求被处理。因此要提供默认的处理对象。
2.在代码调试的时候比较麻烦,如果责任链过长,系统性能可以受到影响。
三、心法
责任链设计模式的本质:分离职责,动态组合。
当有多个对象能够处理请求,考虑使用责任链设计模式。就像公司里有上司,还有上司的上司。
当每个分支都要进行复杂的业务逻辑处理时,使用责任链模式比较好。这个时候将它们分离开来,封装成新的类。
在实际使用的时候,每一个责任链对象都将其由Spring容器管理,由Spring容器管理的bean都是单例的。我们在写代码的时候在责任链对象上加入@Component注解即可。
在客户端调用环境,例如在Controller中,注入一个@Resource(name="第一个责任链对象")的抽象处理者,因为有多个同类型的责任链对象,所以不应该使用@Autowired。
分割线--------------------------------------------------------------------------------------------
下一篇:命令设计模式18