设计模式之责任链模式

责任链模式(Chain of Responsibility Pattern)中包含了一些命令对象和一系列的处理对象。 每一个处理对象决定它能处理哪些命令对象,它也知道如何将它不能处理的命令对象传递给该链中的下一个处理对象。 该模式还描述了往该处理链的末尾添加新的处理对象的方法。

责任链模式的通用类图:

下面是责任链模式的一个简单示例:

package 责任链模式;

//请求对象,本例只是简单地包含一个请求级别
public class Request {
   private int level=0;
   public Request(int level){
       this.level=level;
   }

   public int getLevel(){
        return this.level;
   }
}
package 责任链模式;
 
//每一个Handler类对象首先决定是否需要在该层做处理,然后将控制传递到下一个Handler。
public abstract class Handler {
    int level=0;//用来判断请示的级别,实际项目中可能会更复杂
    Handler nextHandler=null;
    public Handler(int level){
        this.level=level;
    }
 
 
    public  final void handleRequest(Request request){
        if(request.getLevel()==this.level){
            response(request);
        } else {
            if(nextHandler!=null){
                 nextHandler.handleRequest(request);
            }else{
                System.out.println("超出所能处理的级别!");
            }
        }
    }
 
    public void setNextHandler(Handler nextHandler){
        this.nextHandler=nextHandler;
    }
 
    public abstract void response(Request request);
    }
package 责任链模式;
 
public class ConcreteHandler extends Handler{
 
    public ConcreteHandler(int level) {
        super(level);
    }
 
    @Override
    public void response(Request request) {
        System.out.println("ConcreteHandler处理了"+request.getLevel()+"级请求");
    }
 
}
package 责任链模式;
 
//客户端
public class Client {
 
    public static void main(String[] args) {
        Request request1=new Request(1);
        Request request2=new Request(2);
        Request request3=new Request(3);
        Request request4=new Request(4);
 
        ConcreteHandler handler1=new ConcreteHandler(1);
        ConcreteHandler handler2=new ConcreteHandler(2);
        ConcreteHandler handler3=new ConcreteHandler(3);
 
        handler1.setNextHandler(handler2);
        handler2.setNextHandler(handler3);
 
        handler1.handleRequest(request1);
        handler1.handleRequest(request2);
        handler1.handleRequest(request3);
        handler1.handleRequest(request4);
 
    }
 
}
 

输出:

ConcreteHandler处理了1级请求
ConcreteHandler处理了2级请求
ConcreteHandler处理了3级请求
超出所能处理的级别!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 责任链模式 开发一个应用时,多数时候我们都能预先知道哪个方法能处理某个特定请求。然而,情况并非总是如此。例如,想想...
    英武阅读 2,474评论 0 51
  • 设计模式之责任链模式 前言 之前觉得责任链模式是一种很高大上的模式,因为它不想策略模式那么随处可见,也不想模板模式...
    缄默的石头阅读 360评论 0 0
  • 引入责任链模式 责任链模式的实例 责任链模式的分析 责任链模式的优势 责任链模式的应用 引入责任链模式 责任链模式...
    六尺帐篷阅读 21,892评论 2 13
  • 目录 定义 责任链模式(Chain of Responsibility)是一种对象的行为模式。在责任链模式里,很多...
    慕涵盛华阅读 515评论 0 1
  • 熊猫宝宝正在享受美食 饥饿狂傲的老虎,别惹我! 妾等郎君共白首,莫让妾意空白头。 美丽只为你展现,可愿与我牵手每个...
    蓝天羽阅读 440评论 2 2