Fork me on GitHub

java设计模式之职责链模式

责任链模式

  设计模式很多时候都是看见名字都知道意思,责任链,见名知义为请求创建一系列处理对象。 此模式基于请求的类型将请求的发送方和接收方分离。通常每个接收器包含对另一个接收器的引用。如果一个对象不能处理请求,则它将相同的对象传递给下一个接收者,这样形成一条链。这种模式属于行为模式。基于这种情况,我写了一个字符串判断是否为null或者""的责任链,先去判断null、判断不出来在判断"",这样就形成一条链。简单简洁粗暴

责任链模式UML图

责任链模式代码

package com.roc.responsibility;
/**
 * 判断是否为空的抽象类
 * @author liaowp
 *
 */
public abstract class IsEmptyAbstract {

    protected IsEmptyAbstract isEmptyAbstract;
    
    public void setIsEmptyAbstract(IsEmptyAbstract isEmptyAbstract) {
        this.isEmptyAbstract = isEmptyAbstract;
    }
    
    public boolean  inputMsg(String str){
          if(isEmpty(str)){//
              return true;
          }else{//如果没有判断出来就传入下一个
              if(isEmptyAbstract !=null){
                  return isEmptyAbstract.isEmpty(str);
               }else{
                   System.out.println("判断器没有初始化");
                   return false;
               }
          }
    }

    /**
     * 判断是否为空
     * @return
     */
    abstract protected boolean isEmpty(String str);
}
package com.roc.responsibility;
/**
 * 判断是不是null
 * @author liaowp
 *
 */
public class isNull extends IsEmptyAbstract{

    @Override
    protected boolean isEmpty(String str) {
        return null==str;
    }

}
package com.roc.responsibility;
/**
 * 判断是不是""
 * @author liaowp
 *
 */
public class IsEmpty extends IsEmptyAbstract{

    @Override
    protected boolean isEmpty(String str) {
        return "".equals(str);
    }
}
package com.roc.responsibility;
/**
 * 责任链模式
 * @author liaowp
 *
 */
public class Client {
    
    public static void main(String[] args) {
        String str = "";
        isNull isNull = new isNull();
        IsEmpty isEmpty = new IsEmpty();
        isNull.setIsEmptyAbstract(isEmpty);
        System.out.println(isNull.inputMsg(str));
    }
}

责任链模式适用场景

1、有多个对象共同对一个任务进行处理。

2、这些对象使用链式存储结构,形成一个链,每个对象知道自己的下一个对象。

3、一个对象对任务进行处理,可以添加一些操作后将对象传递个下一个任务。也可以在此对象上结束任务的处理,并结束任务。

posted @ 2017-03-30 20:24  鹏&鹏  阅读(1789)  评论(2编辑  收藏  举报