行为模式之职责链模式
简述
在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来的形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。发出请求的客户端并不知道链上的那一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态的重新组织链和分配任务。
UML图
职责链模式包含如下角色:
- 抽象处理者(Handler)角色:定义出一个处理请求的接口。如果需要,接口可以定义出一个方法,已设定和返回对下家的引用。这个角色通常有一个Java抽象类或者Java接口实现。
- 具体处理者(ConcreteHandler)角色:具体处理者接到请求后,可以选择将请求处理掉,或者将请求传给下家。
模式代码
抽象处理者(Handler)代码:
public abstract class Handler { protected Handler successor; public void setSuccessor(Handler successor) { this.successor=successor; } public abstract void handleRequest(String request); }
具体处理者(ConcreteHandler)代码:
public class ConcreteHandler extends Handler { public void handleRequest(String request) { if(请求request满足条件) { ...... //处理请求; } else { this.successor.handleRequest(request); //转发请求 } } }
一个实例
击鼓传花:一群人围在一起,一个人敲鼓,花束依次传递,鼓声一落,停止传递花束。
创建抽象处理者类。
模式的优缺点
优点:降低耦合度,符合开闭原则。
缺点:由于是一个职责链,每次在处理请求都要从头开始遍历,降低了性能。