设计模式其实很简单学习笔记:设计模式之职责链模式

定义

      使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系,将这多个对象连成一条链,

      并沿着这条链传递该请求,直到有一个对象处理它为止。

解释

      即将请求的处理者们组织成一条链,使请求沿着这条职责链传递,直到有一个处理者将其处理或者传递到链的末尾仍没有被处理。

      使用职责链模式,请求发送者不需要关心请求的处理细节,请求是如何传递的以及是谁处理了请求,这样就将请求的发送者与请求的处理者进行了解耦


结构图

 


基本代码

//处理请求的接口
public abstract class Handler
{
   protected Handler successor;//指向下一个请求处理者
    
   //设置下一个处理者
   public void SetSuccessor(Handler successor)
   {
      this.successor=successor;
    }
   //抽象的处理请求的方法
   public abstract void HandlerRequest(int request);
}

//具体请求处理者A

public class ConcreteHandlerA extends Handler
{
   //覆盖父类的抽象方法
   @Override
   public void HandlerRequest(int request)
   {
        if(request==1)
        {
            System.out.println(this.getClass().getCanonicalName()+"处理了请求:"+request);
        }else
        {
           if(this.successor!=null)
           {
               System.out.println(this.getClass().getCanonicalName()+"自身无法处理请求,转给下一个处理者!");
               this.successor.HandlerRequest(request);
           }
        }
   }
}


//具体请求处理者B

public class ConcreteHandlerB extends Handler
{
   //覆盖父类的抽象方法
   @Override
   public void HandlerRequest(int request)
   {
        if(request==2)
        {
            System.out.println(this.getClass().getCanonicalName()+"处理了请求:"+request);
        }else
        {
           if(this.successor!=null)
           {
               System.out.println(this.getClass().getCanonicalName()+"自身无法处理请求,转给下一个处理者!");
               this.successor.HandlerRequest(request);
           }
        }
   }
}


//具体请求处理者C

//具体请求处理者C
public class ConcreteHandlerC extends Handler
{
   //覆盖父类的抽象方法
   @Override
   public void HandlerRequest(int request)
   {
        if(request==3)
        {
            System.out.println(this.getClass().getCanonicalName()+"处理了请求:"+request);
        }else
        {
           if(this.successor!=null)
           {
               System.out.println(this.getClass().getCanonicalName()+"自身无法处理请求,转给下一个处理者!");
               this.successor.HandlerRequest(request);
           }
        }
   }
}


//客户端代码

public static void main(String[] args)
{
   Handler handlerA=new ConcreteHandlerA();
   Handler handlerB=new ConcreteHandlerB();
   Handler handlerC=new ConcreteHandlerC();

   handlerA.SetSuccessor(handlerB);
   handlerB.SetSuccessor(handlerC); 

   for(int i=0;i<4;i++)
   {
       handlerA.HandlerRequest(i);//将请求发送到职责链上
    }
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值