职责链模式

职责链模式

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

image-20220407210742088

怎么实现呢?处理者拥有同样的处理行为即可,严格意义上说是方法名相同,而方法处理不相同,另外可以设置后继处理者。后继处理者不在声明时设置,有利于更好的扩展。

区别于工厂模式,此模式是依次传递,而非跳跃传递

/**
 * @author 州牧
 * @description
 * @since 2022-04-07 21:17
 */
public abstract class Handler {


    protected Handler handler;

    public void SetHandler(Handler handler){//设置后继处理者
        this.handler = handler;
    }
    public abstract void handlerRequest(int args);//处理行为

}

/**
 * @author 州牧
 * @description
 * @since 2022-04-07 21:18
 */
public class DemoHandler1 extends Handler{
    @Override
    public void handlerRequest(int args) {
        if(args>0){
            System.out.println("处理大于0的参数");
        }else {
            if(handler!=null)
            handler.handlerRequest(args);
        }
    }
}

/**
 * @author 州牧
 * @description
 * @since 2022-04-07 21:21
 */
public class DemoHandler2 extends Handler{
    @Override
    public void handlerRequest(int args) {
        if(args == 0){
            System.out.println("处理等于0");
        }else {
            if(handler!=null)
            handler.handlerRequest(args);
        }
    }
}


/**
 * @author 州牧
 * @description
 * @since 2022-04-07 21:22
 */
public class DemoHandlerN extends Handler{
    @Override
    public void handlerRequest(int args) {
        if(args<0){
            System.out.println("处理小于0的参数");
        }else {
            if(handler!=null)
            handler.handlerRequest(args);
        }
    }
}

使用效果

public class Client {
    public static void main(String[] args) {

        Handler h1 =  new DemoHandler1();
        Handler h2 = new DemoHandler2();
        Handler hn = new DemoHandlerN();
        h1.SetHandler(h2);
        h2.SetHandler(hn);

        int[] arg = {1,0,-1};

        for (int i : arg) {
            h1.handlerRequest(i);
        }
    }
}

/*
处理大于0的参数
处理等于0
处理小于0的参数
*/

该模式优点是,可以随时低增加或修改处理一个请求的结构,增强了给对象指派职责的灵活性。

缺点:一个请求有可能经过整条链都没处理。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值