菜鸟教程链接:责任链模式
概念责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链。这种模式给予请求的类型,对请求的发送者和接收者进行解耦。在这种模式中,通常每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推。
简单而言, 就是将不同的处理器通过类似于单链表的形式去串联起来,通过第一个节点将接收的请求处理之后依次向下传递,从而让对应的消息的到充分的使用。
优点:
1、降低耦合度。它将请求的发送者和接收者解耦。
2、简化了对象。使得对象不需要知道链的结构。
3、增强给对象指派职责的灵活性。通过改变链内的成员或者调动它们的次序,允许动态地新增或者删除责任。
4、增加新的请求处理类很方便。
缺点:
1、不能保证请求一定被接收。
2、系统性能将受到一定影响,而且在进行代码调试时不太方便,可能会造成循环调用。
3、可能不容易观察运行时的特征,有碍于除错。
请求可以定义为某一类别, 且处理有级别或情境可分为不同的处理逻辑,此时可以使用责任链模式。比如对于违规行为的处理,对于员工工单申请的流程处理。
示例代码public abstract class AbstractLogger {
public static int INFO = 1;
public static int DEBUG = 2;
public static int ERROR = 3;
protected int level;
//责任链中的下一个元素
protected AbstractLogger nextLogger;
// 对于固定的场景, 该处其实可以不用set直接在子类中将对应的下一层级写死
public void setNextLogger(AbstractLogger nextLogger){
this.nextLogger = nextLogger;
}
public void logMessage(int level, String message){
// 如果是从小级别向高处理级别,其实可以做判断是否需要往下传递
if(this.level <= level){
write(message);
}
if(nextLogger !=null){
nextLogger.logMessage(level, message);
}
}
abstract protected void write(String message);
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)