博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式学习笔记之责任链模式
阅读量:6802 次
发布时间:2019-06-26

本文共 1589 字,大约阅读时间需要 5 分钟。

责任链模式
    使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系。将这些对象连成一条链,并沿着这条链检查该请求,并对其进行处理,或者将它传递给下一个对象。
    责任链模式有两个角色组成:
    
抽象处理者角色:它定义了一个处理请求的接口。当然对于链子的不同实现,也可以在这个角色中实现后继链。
    
具体处理者角色:实现抽象处理者定义的接口,并处理它所负责的请求。
 

下面是《设计模式》中给出的适用范围

    1) 有多个的对象可以处理一个请求,哪个对象处理该请求运行时刻自动确定。
    2) 你想在不明确指定接收者的情况下,向多个对象中的一个提交一个请求。
    3) 可处理一个请求的对象集合应被动态指定。

 

    责任链模式又有不纯的区别。

    纯的责任链模式,规定一个具体处理者角色只能对请求作出两种动作:自己处理;传给下家。不能出现处理了一部分,把剩下的传给了下家的情况。而且请求在责任链中必须被处理,而不能出现无果而终的结局。反之,则就是不纯的责任链模式。
    在一个纯的责任链模式里面,一个请求必须被某一个处理者对象所接收;在一个不纯的责任链模式里面,一个请求可以最终不被任何接收端对象所接收。
 
/**
 * 持有下一个处理请求的对象
 */
public abstract class Handler {
 
    protected Handler handler;
 
    /**
     * 具体处理方法
     */
    protected abstract int handler(int num);
 
    public Handler getHandler() {
        return handler;
    }
 
    /**
     * 设置下一个处理请求的对象
     */
    public void setHandler(Handler handler){
        this.handler = handler;
    }
}
public class AuditHandler extends Handler{
 
    @Override
    protected int handler(int num) {
        num++;
        System.out.println("audit......"+ num);
        return 
getHandler().handler(num);
    }
 
}
public class CleanHandler extends Handler{
 
    @Override
    protected int handler(int num) {
        num++;
        System.out.println("clean......"+ num);
        return 
getHandler().handler(num);
    }
 
}
public class MatchHandler extends Handler{
 
    @Override
    protected int handler(int num) {
        num++;
        System.out.println("match......"+ num);
        return num;
    }
 
}
public class Client {
 
    public static void main(String[] args) {
        Handler audit = new AuditHandler();
        Handler clean = new CleanHandler();
        Handler match = new MatchHandler();
 
        audit.setHandler(clean);
        clean.setHandler(match);
 
        audit.handler(0);
    }
 
}
参考资料:《深入浅出设计模式》
                 《Head First 设计模式》
                   

 

 

转载于:https://www.cnblogs.com/LeslieXia/p/5494870.html

你可能感兴趣的文章
Primary key、unique、index之间的关系
查看>>
关于完美的练习
查看>>
heap&stack 区别
查看>>
hadoop hive安装手记(转)
查看>>
kinect新知
查看>>
堆实例
查看>>
ASP.NET中各个后缀名的含义
查看>>
always和always@(*)
查看>>
Android 中压力测试工具Monkey的用法(转)
查看>>
NYOJ-61 传纸条(一)
查看>>
乱码问题总结
查看>>
Raspberry pi raspbain系统下使用vim
查看>>
进程通信之共享内存
查看>>
通用单例模式
查看>>
Sharepoint学习笔记—习题系列--70-576习题解析 -(Q99-Q101)
查看>>
使用js 文件参数 以及IHttpModule实现服务验证asp.net 版的初步实现
查看>>
JavaScript操作Cookie
查看>>
转oracle 学习 - 表空间
查看>>
百度地图显示多个标注点
查看>>
robots.txt的介绍和写作
查看>>