设计模式之一:责任链

概念:

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

这里写图片描述

代码表示:

比如新生开学流程:先去报到,再去买盆子、被子,再去买书,我们按照这个流程先来设计3个 处理器:分别处理报到,盆子和书的事情:

//通用接口
public interface Processer {

    String process(String str);

}

// 报到处理器;
public class ReportProcess implements Processer{

    @Override
    public String process(String str) {

     return str.replace("去报到", "报到成功");

    }
}


//盆子处理器
public class PenziProcess implements Processer{

    @Override
    public String process(String str) {

        return str.replace("买盆子", "买好盆子");
    }

}


//书本处理器
public class BookProcess implements Processer{

    @Override
    public String process(String str) {

        return str.replace("买书", "买好书");
    }

}

//所有事物在此类中处理:
public class AllProcess {

    private String msg;
    private Processer[]  processers = {new ReportProcess(),new PenziProcess(),new BookProcess()};

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public String handle(){
        String r =msg;
        for(Processer pro:processers){

            r = pro.process(r);
        }
        return r;

    }

}


//再看main类测试结果:
public static void main(String[] args) {

        String msg= "去报到,买盆子,买书";

        AllProcess ap = new AllProcess();
        ap.setMsg(msg);
        String result = ap.handle();
        System.out.println(result);

    }

运行结果是:报到成功,买好盆子,买好书。这说明,整个任务在各个处理链上处理成功。

扩展:

如果已经有一系列的处理器,需要增加到责任链上去,那么在设计的时候,这一些列的处理器也可当做是一个处理器,里面封装好处理逻辑,同时,也可以将单独的处理器添加到该系列上.

// 一系列的处理器
public class ChainProcess implements Processer{

    private List<Processer> list = new ArrayList<Processer>();


    public ChainProcess add(Processer p){
        list.add(p);
        return this;
    }


    public List<Processer> getList() {
        return list;
    }


    public void setList(List<Processer> list) {
        this.list = list;
    }



    @Override
    public String process(String str) {
        String result  = str;
        for(Processer po:list){
            result = po.process(result);
        }
        return result;

    }

}


// 测试:只调用2个处理器
public static void main(String[] args) {

        String msg= "去报到,买盆子,买书";

        AllProcess ap = new AllProcess();
        ChainProcess cp = new ChainProcess();
        cp.add(new BookProcess()).add(new PenziProcess());
        ap.setCp(cp);
        ap.setMsg(msg);
        String result = ap.handle();
        System.out.println(result);

    }

测试结果:去报到,买好盆子,买好书。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值