我眼中的责任链模式

什么时候需要用到责任链模式

处理事情的对象是先后顺序的。编程中最明显的就是三级缓存,一般,你会先查询内存数据,没有数据再看硬盘数据,再没有数据,则请求网络数据。这里很明显的就是一个个的进行处理。某个对象没有能力处理则把处理权交给另外的对象。

类图

想要行为一个完整的链,需要有一个设置下一级的能力,类图中需要体现这点

类图倒是很简单的
责任链

代码

//接口部分
public interface Loader {

    //这是基本功能
    public String getUrl();

    public void setUrl(String url);

    //这是设置下一级的责任人
    public void setNext(Loader loader);

}
public class LocalLoader implements Loader{

    private String url;
    private Loader next;

    @Override
    public String getUrl() {
        // TODO Auto-generated method stub
        if (url != null) {
            return url;
        }
        return next.getUrl();
    }

    @Override
    public void setNext(Loader loader) {
        // TODO Auto-generated method stub
        next = loader;
    }

    public void setUrl(String url) {
        this.url = url;
    }



}

//网络的加载
public class NetLoader implements Loader{


    private String url;
    private Loader next;
    @Override
    public String getUrl() {
        // TODO Auto-generated method stub
        if (url != null) {
            return url;
        }
        return next.getUrl();
    }

    @Override
    public void setNext(Loader loader) {
        // TODO Auto-generated method stub
        next = loader;
    }

    public void setUrl(String url) {
        this.url = url;
    }

}

调用

        //手动的设置下一级的处理人是谁,可以在调用时进行指定,非常的灵活
        Loader loader = new CachedLoader();
        Loader loadernext = new LocalLoader();
        loadernext.setNext(new NetLoader());
        loader.setNext(loadernext);

        loader.setUrl("test");
        loader.getUrl();

        Log.d("第一级责任人有处理 "+loader.getUrl());

        //改变条件然后再去获取值
        loader.setUrl(null);
        loadernext.setUrl("test2");
        Log.d("第一级责任人没有处理 "+loader.getUrl());

为了更好的查看,以代码的方式进行了记录.详情请查看DesignPattern中的 com.arron.pattern.dutychain下的内容.戳我查看详情

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值