设计模式(十四)之责任链模式

什么是责任链模式

当外部请求程序进行某个处理,但程序暂时无法直接决定由哪个对象负责处理时,就需要推卸责任。这种情况下,我们可以考虑多个对象组成一条责任链,然后按照他们在职责链上的顺序一个一个地找出到底应该谁来负责处理。

例子

做蛋糕:
鸡蛋 一> 泡状物 一> 泡状混合物 一> 蛋糕
Something

package BehavioralPattern.ChainOfResponsibilityMode;

/**
 * 蛋糕类
 */

public class Something {

    private String txt;

    public Something(String txt){
        this.txt = txt;
    }

    public String getTxt(){
        return txt;
    }

    public void setTxt(String txt){
        this.txt = txt;
    }
}

Handler接口

package BehavioralPattern.ChainOfResponsibilityMode;

/**
 * 处理接口
 */

public interface Handler {
    void process(Something something);
}

步骤一

package BehavioralPattern.ChainOfResponsibilityMode;

/**
 * 步骤一
 */

public class HandlerOne implements Handler{
    @Override
    public void process(Something something) {
        String txt = something.getTxt();
        System.out.println("我现在是"+txt+",我要被打发成泡状了");
        something.setTxt("泡状物");
    }
}

步骤二

package BehavioralPattern.ChainOfResponsibilityMode;

/**
 * 步骤二
 */

public class HandlerTwo implements Handler{
    @Override
    public void process(Something something) {
        String txt = something.getTxt();
        System.out.println("我现在是"+txt+",我要加配料了");
        something.setTxt("泡状混合物");
    }
}

步骤三

package BehavioralPattern.ChainOfResponsibilityMode;

/**
 * 步骤三
 */

public class HandlerThree implements Handler{
    @Override
    public void process(Something something) {
        String txt = something.getTxt();
        System.out.println("我现在是"+txt+",我要进烤箱了");
        something.setTxt("蛋糕");
    }
}

步骤四

package BehavioralPattern.ChainOfResponsibilityMode;

/**
 * 步骤四
 */

public class HandlerFour implements Handler{
    @Override
    public void process(Something something) {
        String txt = something.getTxt();
        System.out.println("我现在是"+txt+",制作完成");
    }
}

处理链

package BehavioralPattern.ChainOfResponsibilityMode;

import java.util.ArrayList;
import java.util.List;

/**
 * 处理链
 */

public class HandlerChain {
    List<Handler> chain = new ArrayList<>();

    public void addHandler(Handler handler){
        chain.add(handler);
    }

    public void process(Something something){
        for(Handler handler : chain){
            handler.process(something);
        }
    }
}

结果
在这里插入图片描述

总结

责任链模式是一种把多个处理器组合在一起,依次处理请求的模式;

责任链模式的好处是添加新的处理器或者重新排列处理器非常容易;

责任链模式经常用在拦截、预处理请求等。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值