Java设计模式——职责链模式(Chain of Responsibility)

news/2024/5/19 13:01:32 标签: 责任链模式, 设计模式

责任责任链模式是一种对象的行为模式。在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织和分配责任。
责任链模式结构:
这里写图片描述
源码如下:

public abstract class Handler {

    /**
     * 持有后继的责任对象
     */
    protected Handler successor;

    /**
     * 示意处理请求方法,虽然这个方法是没有传入参数的,但实际是可以传参的,根据具体情况
     * @author 付玉伟
     * @time 2015-3-3 下午09:34:35
     */
    public abstract void handlRequest();

    public Handler getSuccessor() {
        return successor;
    }

    public void setSuccessor(Handler successor) {
        this.successor = successor;
    }

}
public class ConcreteHandler extends Handler {

    @Override
    public void handlRequest() {
        // 判断是否有后继责任对象,如果有就把请求转发给后继对象,如果没有则处理请求
        if(super.getSuccessor() != null){
            System.out.println("放过请求,请求转发...");
            getSuccessor().handlRequest();
        }else{
            System.out.println("处理请求...");
        }
    }

}
public class Client {

    /**
     * @author 付玉伟
     * @time 2015-3-3 下午09:38:59
     * @param args
     */
    public static void main(String[] args) {
        Handler handler1 = new ConcreteHandler();
        Handler handler2 = new ConcreteHandler();

        handler1.setSuccessor(handler2);
        handler1.handlRequest();
    }

}
    /**
     * @author 付玉伟
     * @time 2015-3-3 下午09:38:59
     * @param args
     */
    public static void main(String[] args) {
        Handler handler1 = new ConcreteHandler();
        Handler handler2 = new ConcreteHandler();

        handler1.setSuccessor(handler2);
        handler1.handlRequest();
    }

上述活动的时序图如下:
这里写图片描述
这里只是简单讲一下,如果以后我遇到好的例子会后续更新此文章


http://www.niftyadmin.cn/n/1455065.html

相关文章

如何处理多人同时登录同一个账号以及如何统计在线人数和访问量?

话不多说直接贴代码 public class SessionListener implements HttpSessionListener {// 保存session和username的映射private static HashMap hUserName new HashMap();private int MaxSession;private int activeSession;public void sessionCreated(HttpSessionEvent se) …

django的url路由分发

Django框架的路由分发可以使用include分发到各个app如 from django.urls import path, includeurlpatterns [path(admin/, admin.site.urls),# 分发到app01下的urls.py中 由app01.urls继续分发到视图函数# app01.urls.py要设置app_nameapp01 否则会提示找不到apppath(app01/…

Servlet线程安全问题

在servlet百科中我们可以看到这么一段说明:“在 Web 应用程序中,一个 Servlet 在一个时刻可能被多个用户同时访问。这时 Web 容器将为每个用户创建一个线程来执行 Servlet。如果 Servlet 不涉及共享资源的问题,不必关心多线程问题。但如果 Se…

张坤(帮别人名字作诗)

张坤(帮别人名字作诗)——代腾飞 2008年11月3日 于成都张兄才俊气比高坤乾大地任逍遥有勇有谋行天下才气纵横傲今朝转载于:https://www.cnblogs.com/daitengfei/archive/2008/11/03/1325861.html

django rest_framework 错误信息 AssertionError: When a serializer is passed a `data` keyword

今天在学习django 的rest_framework规范时,遇到了 AssertionError: When a serializer is passed a data keyword argument you must call .is_valid() before attempting to access the serialized .data representation. 错误信息。记录一下解决方法。 错误代码&…

Java设计模式——构造者模式(Builder)

建造模式是对象的创建模式。建造模式可以将一个产品的内部对象与产品的生产过程分割开啦,从而可以使一个建造过程生成具有不同的内部表象的产品对象。 对象性质的构造: 有些情况下,一个对象会有一些重要的性质,在它们没有恰当的…

html5 手机页面

引用&#xff1a;http://tech.ddvip.com/2012-11/1352823637185316.html 在用HTML5开发手机应用或手机网页时&#xff0c;<head>部分总会有如下一段代码&#xff0c;这段代码到底什么意思呢。在网上&#xff0c;大家会得到很多答案。我从网上搜集了部分介绍&#xff0c;整…

让flash自动显示代码提示的两种方式

方式一&#xff1a;通过指定对象类型 来触发代码提示。在使用 ActionScript2.0 时&#xff0c;可以严格指定基于内置类&#xff08;例如 Button、Array 等&#xff09;的变量的类型。这样做之后&#xff0c;“脚本”面板将显示该变量的代码提示。例如&#xff0c;假设键入以下代…