职责链将候选对象连成一条链,在该链上传递请求,直到链上某一对象处理请求。
该请求的接受者为隐式接收者。为了在链上转发该请求,链上对象须有一致的处理请求及访问后继对象的接口。
职责链分为三部分:
- Handle 处理请求的接口
- ConcreteHandle 处理辖内请求或访问后继对象
- Client 提交请求的客户
Handle
abstract class Handle {
Handle successor=null;
abstract public void handleRequest();
public void setSuccessor(Handle successor) {
this.successor = successor;
}
public Handle getSuccessor() {
return successor;
}
}
ConcreteHandle
class ConcreteHandle extends Handle {
@Override
public void handleRequest() {
if(canHandle()) {
//Handle the request
} else if(getSuccessor() != null) {
getSuccessor().handleRequest();
}
}
boolean canHandle() {
return false;
}
}