职责链模式

举报
小鲍侃java 发表于 2021/09/10 00:24:52 2021/09/10
【摘要】 定义:为了避免请求的发送者和接收者之间的耦合关系,使多个接受对象都有机会处理请求。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。 优点:1.客户端与具体的处理者解耦,客户端只认识一个Hanlder接口,降低了客户端(即请求发送者)与处理者的耦合度。         &...

定义:为了避免请求的发送者和接收者之间的耦合关系,使多个接受对象都有机会处理请求。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。

优点:1.客户端与具体的处理者解耦,客户端只认识一个Hanlder接口,降低了客户端(即请求发送者)与处理者的耦合度。

           2.简化了对象。使得对象不需要知道链的结构。

缺点:1.提高了系统的复杂度。

           2.不能保证一定被处理。           

使用场景:多个类分别多次的调用。

类图:

通用代码:

Handler 接口


      static abstract class Handler {
             protected Handler mNextHandler;
             public void setnextHanlder(Handler successor) {
                 this.mNextHandler = successor;
              }
             public abstract void handleRequest(String request);
          }
  
 

具体的处理类


      static class ConcreteHandlerA extends Handler {
             @Override
              public void handleRequest(String request) {
                 if ("requestA".equals(request)) {
                     //doSomething
                     return;
                  }
                 //给下一个责任类
                 if (this.mNextHandler != null) {
                     this.mNextHandler.handleRequest(request);
                  }
              }
          }
  
 

调用


      class Client {
         public static void main(String[] args) {
              Handler handlerA = new ConcreteHandlerA();
              Handler handlerB = new ConcreteHandlerB();
             //放入下一个责任类 
              handlerA.setnextHanlder(handlerB);
              handlerA.handleRequest("requestB");
          }
  
 

栗子

抽象审批类():设计的核心类。处理请求和跳转请求。


      public abstract class ClassType{
     	protected ClassType nextClassType;//下个责任对象
     	public ClassType(String name) {
     		super();
     		this.name = name;
      	}
     	//设定下个责任对象
     	public void setNextClassType(ClassType nextClassType) {
     		this.nextClassType = nextClassType;
      	}
     	/**
       * 处理请求的核心的业务方法
       * @param request
       */
     	public abstract void handleRequest(Long age);
      }
  
 

抽象实现类


      public class smallClass extends ClassType{
     	@Override
      	public void handleRequest(Long age) {
     		if(age < 6){
     			System.out.println("是小班我的人");
      		}else{
     			this.nextLeader.handleRequest(age);
      		}
      	}
      }
  
 

      public class middleClass extends ClassType{
     	@Override
      	public void handleRequest(Long age) {
     		if(age > 6 && age < 8){
     			System.out.println("是中班班我的人");
      		}else{
     			this.nextLeader.handleRequest(age);
      		}
      	}
      }
  
 

      public class bigClass extends ClassType{
     	@Override
      	public void handleRequest(Long age) {
     		if(age > 8 && age < 10){
     			System.out.println("是大班班我的人");
      		}else{
     			System.out.println("多大了 还来幼儿园");
      		}
      	}
      }
  
 

调用


      public class Client {
     	public static void main(String[] args) {
      		ClassType small = new smallClass();
      		ClassType middle = new middleClass();
      		ClassType big = new bigClass();
     		//组织责任链对象关系
      		small.setNextLeader(middle);
      		middle.setNextLeader(big);
     		//开始请假操作
      		small.handleRequest(12);
      	}
  
 

 

文章来源: baocl.blog.csdn.net,作者:小黄鸡1992,版权归原作者所有,如需转载,请联系作者。

原文链接:baocl.blog.csdn.net/article/details/102665192

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。