chainOfResponsibility责任链模式

责任链(Chain of Responsibility)模式 :

  责任链模式是对象的行为模式。使多个对象都有机会处理请求,从而避免请求的发送者和接受者直接的耦合关系。将这些处理对象连成一条链,沿着这条链传递该请求,直到有一个对象处理它为止。责任链模式强调的是每一个对象及其对下家的引用来组成一条链,利用这种方式将发送者和接收者解耦,类图如下:

通过上图可以看出责任链模式有两个角色:

抽象处理者(Handler)角色 :定义一个请求的接口。如果需要可以定义个一个方法用来设定和返回下家对象的引用。

具体处理者(ConcreteHandler)角色 :如果可以处理就处理请求,如果不能处理,就把请求传给下家,让下家处理。也就是说它处理自己能处理的请求且可以访问它的下家。

代码演示:

1.新建一个抽象处理角色,当然,它是一个abstract类,因为里面的处理方法要给每个具体角色类去扩展使用

/**
 * 抽象处理角色
 * @author mlxs
 *
 */
public abstract class Hander {

    /**
     * 处理角色 实例
     */
    protected Hander hander;

    /**
     * 抽象处理方法:执行处理
     */
    public abstract void doHander(String reqStr);

    public Hander getHander() {
        return hander;
    }

    public void setHander(Hander hander) {
        this.hander = hander;
    }

}

2.添加3个具体实现子类:HanderFirst,HanderSecond,HanderLast,并实现doHander方法

/**
 * 具体处理角色
 * @author mlxs
 *
 */
public class HanderFirst extends Hander {

    @Override
    public void doHander(String reqStr) {
        //得到当前处理角色
        Hander nowHander = getHander();
        //判断:如果是自己的责任,则处理,处理完后结束(return);否则,传给下一角色处理
        if(reqStr.equals("HanderFirst")){
            System.out.println("---Hander1 doHander()---");
            return;
        }else{
            //不是自己的责任,责任推给下家
            System.out.println("Hander1 pass --> next");
            nowHander.doHander(reqStr);
        }
    }
}
/**
 * 具体处理角色
 * @author mlxs
 *
 */
public class HanderSecond extends Hander {

    @Override
    public void doHander(String reqStr) {
        //得到当前处理角色
        Hander nowHander = getHander();
        //判断:如果是自己的责任,则处理,处理完后结束(return);否则,传给下一角色处理
        if(reqStr.equals("HanderSecond")){
            System.out.println("---Hander2 doHander()---");
            return;
        }else{
            //不是自己的责任,责任推给下家
            System.out.println("Hander2 pass --> next");
            nowHander.doHander(reqStr);
        }
    }
}
/**
 * 具体处理角色
 * @author mlxs
 *
 */
public class HanderLast extends Hander {

    @Override
    public void doHander(String reqStr) {
        //如果前面的都没处理,最后一家处理
        System.out.println("...\n---HanderLast doHander()---");
    }

}

3.编写客户端请求类:Main

public class Main {

    public static void main(String[] args) {

        //创建3个具体处理者
        Hander hander1 = new HanderFirst();
        Hander hander2 = new HanderSecond();
        Hander hander3 = new HanderLast();

        //3个处理者链接,形成责任链
        hander1.setHander(hander2);
        hander2.setHander(hander3);

        //从hander1开始处理请求
//        hander1.doHander("HanderFirst");
//        hander1.doHander("HanderSecond");
        hander1.doHander("hahahahh");
    }
}

4.运行,查看结果

Hander1 pass --> next
Hander2 pass --> next
...
---HanderLast doHander()---

过滤器和拦截器,就是通过这种模式思想写的,,,

时间: 2024-08-28 06:41:41

chainOfResponsibility责任链模式的相关文章

设计模式之责任链模式--- Pattern chain-of-responsibility

模式的定义 责任链模式定义如下: Avoid coupling the sender of a request to its receiver by giving more than one object a chance to handle the request.Chain the receiving objects and pass the request along the chain until an object handles it. 使多个对象都有机会处理请求,从而避免请求的发送

学习笔记——责任链模式ChainOfResponsibility

责任链模式,主要是通过自己记录一个后继者来判断当前的处理情况.Handler中,再增加一个方法用于设置后继对象,如SetHandler(Handler obj). 然后Handler类以其子类的处理方法Handler()通过判断后继对象是否存在来操作: 1.没有设置后继对象,自己处理事件 2.有后继对象,交给后继者的Handler()处理. 通过这样的不断调用传递,处理责任将到达最终的对象上. 比如,当我们要处理一个网络请求返回时,一般肯定是写一串函数,然后通过判断来依次执行相应操作,如果采用责

责任链模式(chainOfResponsibility)

参考文章:http://wiki.jikexueyuan.com/project/design-pattern-behavior/chain-four.html 定义: 使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系.将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止. 分类: 纯的职责链模式 一个纯的职责链模式要求一个具体处理者对象只能在两个行为中选择一个:要么承担全部责任,要么将责任推给下家,不允许出现某一个具体处理者对象在承担了一部分或全部责任后

设计模式学习-责任链模式

1.定义 避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止. 2.类图 3.代码示例 1 package com.zhaoyangwoo.chainOfResponsibility; 2 3 /** 4 * Created by john on 16/6/16. 5 * 职责链模式,经费审批场景 6 */ 7 public class Responsibility { 8 9 public static void

24种设计模式--责任链模式【Chain ofResponsibility Pattern】

中国古代对妇女制定了“三从四德”的道德规范,“三从”是指“未嫁从父.既嫁从夫.夫死从子”,也就是说一个女性,在没有结婚的时候要听从于父亲,结了婚后听从于丈夫,丈夫死了还要听儿子的,举个例子来说,一个女的要出去逛街,同样这样的一个请求,在她没有出嫁前她必须征得父亲的同意,出嫁之后必须获得丈夫的许可,那丈夫死了怎么办?一般都是男的比女的死的早,还要问问儿子是否允许自己出去逛街,估计你下边马上要问要是没有儿子怎么办?请示小叔子.侄子等等,在父系社会中,妇女只占从属地位,现在想想中国的妇女还是比较悲惨的

Java设计模式偷跑系列(十八)建模和责任链模式的实现

转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/40018231 责任链模式(ChainOfResponsibility): 有多个对象,每一个对象持有下一个对象的引用,形成一条链.请求在这条链上传递.直到某一对象决定处理该请求,可是发出者并不清楚终于哪个对象会处理该请求. 一.uml建模: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGh5X3ljdQ==/font/5a6L5L2T/fo

设计模式—责任链模式

责任链模式:在请求对象不清楚处理对象是谁的情况下使用该模式. 请求对象把请求提交给处理对象,所有的处理对象依次进行判断,如果是自己的处理范围则进行处理,结束请求向后传递,如果不属于自己的处理范围则向下传递请求直到请求被处理. 注意区分责任链模式和装饰模式的区别:责任链是对请求对象的处理过滤:装饰模式是对被装饰对象的自由功能扩展. 实例说明:员工请假,5天以内组长有权批准,5~10天ceo有权批准,10~20天董事长有权批准. 定义管理者接口:Manager public abstract voi

设计模式(24)-----责任链模式

责任链模式(chain of responsibility) 定义 责任链模式是对象的行为模式.使多个对象都有机会处理请求,从而避免请求的发送者和接受者直接的耦合关系.将这些对象连成一条链,沿着这条链传递该请求,直到有一个对象处理它为止. UML类图 角色 抽象处理者(Handler)角色 :定义一个请求的接口.如果需要可以定义个一个方法用来设定和返回下家对象的引用. 具体处理者(ConcreteHandler)角色 :如果可以处理就处理请求,如果不能处理,就把请求传给下家,让下家处理.也就是说

Java设计模式菜鸟系列(十八)责任链模式建模与实现

转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/40018231 责任链模式(ChainOfResponsibility): 有多个对象,每个对象持有下一个对象的引用,形成一条链,请求在这条链上传递,直到某一对象决定处理该请求,但是发出者并不清楚最终哪个对象会处理该请求. 一.uml建模: 二.代码实现 /** * 责任链模式:有多个对象,每个对象持有下一个对象的引用,形成一条链, * * 请求在这条链上传递,直到某一对象决定处理该请求,