singe - yxbook/notes GitHub Wiki

一、责任链设计模式

1 含义

责任链模式是一条链,链上有多个节点,每个节点都有各自的责任。当有输入时,第一个责任节点看自己能否处理该输入,如果可以就处理。如果不能就交由下一个责任节点处理。依次类推,直到最后一个责任节点

3 基类例子


package com.iamlook.design.chain;

/**
 * @program: notes
 * @description: 责任链模式
 * @author: Created by youxun
 **/
public abstract class AbstractLogger {

    /*
    判断是否进入下一个节点参数
     */
    protected int level;

    /*
    下一个责任点
     */
    protected AbstractLogger nextLogger;

    public void setNextLogger(AbstractLogger nextLogger) {
        this.nextLogger = nextLogger;
    }

    public void logMessage(int level, String message){
        if(this.level <= level){
            /*
            如果当前节点可以处理,直接处理
             */
            excute(message);
        }
        /*
          如果当前节点不能处理,并且有下个节点,交由下个节点处理
         */
        if(null != nextLogger){
            nextLogger.logMessage(level, message);
        }
    }

    /*
    执行业务逻辑代码
     */
    abstract protected void excute(String message);

}



3 责任链模式妙用

用了拆分if 与 case代码块。使代码更高端


String input = "1";  
if ("1".equals(input)) {    
    //TODO do something  
} else if ("2".equals(input)) {
    //TODO do something  
} else if ("3".equals(input)) {   
   //TODO do something       
}


String input = "1";   
switch (input) {
  case "1":    
    //TODO do something    
    break;   
  case "2":     
  //TODO do something     
   break;   
  case "3":   
   //TODO do something    
   break;  
  default:    
   //TODO do something    
  break;  
 }