责任链模式
2017-06-24 本文已影响0人
上海马超23
-
抽象类 handler
- level 属性: 当前handler能够处理的责任级别
- 构造方法(level)
- nextHandler:责任链的下一个节点,还有setter
- final方法 HandlerMessage(Request):这是handler的公共逻辑,负责判断当前请求的level能否处理,如果不能处理传递给下一个handler。唯一对外公开的方法。
- abstract方法 response(Request) :处理请求
-
handlerImplement
- 实现response方法,定义该角色的职能。
- 构造方法定义该角色能够处理的任务level
-
请求接口 RequestInterface
- getLevel:返回任务的level
- getRequest:返回任务的请求信息
requests = new List(new request1(), new request2(), new request3());
handler1 = new HandlerImplement1();
handler2 = new HandlerImplement2();
handler3 = new HandlerImplement3();
handler1.setNext(handler2);
handler2.setNext(handler3);
for (request : requests) {
handler1.HandleMessage(request); // 统一由责任链的第一个节点开始驱动
}
总结
优点
- 请求方不用知道整个处理链的全貌,只管调用第一个节点。扩展责任链节点也不会影响请求方。
缺点
- 请求链过长可能会造成性能问题。一般在Handler里设置最大节点数量属性,setNextHandler的时候判断是否超过该值,避免出现超长链。