设计模式-责任链

责任链

  责任链模式就是为请求创建一个接收者对象的链。这种模式给予请求的类型,对请求的发送者和接收者进行解耦。属于行为型模式。

  每个接收者都包含下一个接收者的引用,如果该接收者不能处理该请求,那么就把该请求传递到下一个接收者。

优点

  • 降低耦合度,将请求的发送者和接收者解耦。
  • 简化了对象,使得对象不需要知道链的结构。
  • 增强了给对象指派职责的灵活性,通过改变链内的成员或者调动它们的次序,允许动态的新增或者删除责任。
  • 增加新的请求处理类变得很简单。

缺点

  • 不能保证请求一定被接收。(可能所有的处理者都处理不了这个请求)
  • 系统的性能将受到一定影响,而且在进行代码调试的时候会很麻烦。(比如,处理链有10个处理者,这个请求只能被最后一个处理者处理,但该请求还是要经过前面9个处理者)
  • 可能不容易观察运行时的特征,有碍于除错。

使用场景

  • 有多个对象可以处理同一个请求,具体哪个对象处理该请求由运行时刻自动决定。
  • 在不明确指定接收者的情况下,向多个对象中的一个提交请求。
  • 可动态指定一组对象处理请求。

类图

image
  声明一个抽象类Logger,在Logger中声明一个抽象方法write。然后声明4个继承Logger的类,并实现write方法。

1
2
3
4
5
6
7
8
9
10
11
DebugLogger debugLogger = new DebugLogger(1);
InfoLogger infoLogger = new InfoLogger(2);
WarningLogger warningLogger = new WarningLogger(3);
ErrorLogger errorLogger = new ErrorLogger(4);
//链式关系
debugLogger.setLogger(infoLogger);
infoLogger.setLogger(warningLogger);
warningLogger.setLogger(errorLogger);

debugLogger.loadMessage(1,"test1");
debugLogger.loadMessage(3,"test3");

参考