设计模式—责任链模式

责任链模式:在请求对象不清楚处理对象是谁的情况下使用该模式。

   请求对象把请求提交给处理对象,所有的处理对象依次进行判断,如果是自己的处理范围则进行处理,结束请求向后传递,如果不属于自己的处理范围则向下传递请求直到请求被处理。

  注意区分责任链模式和装饰模式的区别:责任链是对请求对象的处理过滤;装饰模式是对被装饰对象的自由功能扩展。

实例说明:员工请假,5天以内组长有权批准,5~10天ceo有权批准,10~20天董事长有权批准。

定义管理者接口:Manager

  public abstract void dealRequest(int request);为处理请假的方法

package com.zpj.designMode.chainOfResponsibility;

public abstract class Manager {
    protected Manager leader;

    // 处理方法
    public abstract void dealRequest(int request);

    public Manager(Manager leader) {
        super();
        this.leader = leader;
    }

}

添加三个管理者:

package com.zpj.designMode.chainOfResponsibility;

public class Chairman extends Manager {

    public Chairman(Manager leader) {
        super(leader);
    }

    @Override
    public void dealRequest(int request) {
        //有权对>20天的请假进行处理
        if (request <= 20) {
            System.out.println("Chairman--------允许----------");
        } else {
            System.out.println("Chairman--------拒绝----------");
        }

    }

}

package com.zpj.designMode.chainOfResponsibility;

public class ChiefExecutiveOfficer extends Manager {

    public ChiefExecutiveOfficer(Manager leader) {
        super(leader);
    }

    @Override
    public void dealRequest(int request) {
        //有权对>10天的请假进行处理
        if (request <= 10) {
            System.out.println("ChiefExecutiveOfficer--------允许----------");
        } else {
            leader.dealRequest(request);
        }

    }

}

package com.zpj.designMode.chainOfResponsibility;

public class GroupLeader extends Manager {

    public GroupLeader(Manager leader) {
        super(leader);
    }

    @Override
    public void dealRequest(int request) {
        //有权对>5天的请假进行处理
        if (request <= 5) {
            System.out.println("GroupLeader--------允许----------");
        } else {
            leader.dealRequest(request);
        }
    }

}

使用示例:

package com.zpj.designMode.chainOfResponsibility;

import org.junit.Test;

public class testUnit {

    @Test
    public void test01() {
        Manager chairman = new Chairman(null);
        Manager ceo = new ChiefExecutiveOfficer(chairman);
        Manager groupLeader = new GroupLeader(ceo);
        //向组长发起请假申请
        groupLeader.dealRequest(26);

    }

}

处理者一层一层的对请求进行过滤,直至被处理或者过滤结束

---------------------------

时间: 2024-10-13 12:04:55

设计模式—责任链模式的相关文章

java 设计模式 -- 责任链模式

设计模式 – 责任链模式 介绍: 责任链模式是一种动态行为模式,有多个对象,每一个对象分别拥有其下家的引用.连起来形成一条链.待处理对象则传到此链上,在此链进行传递,且待处理对象并不知道此会被链上的哪个对象处理,这使得我们能够动态的添加链上的对象而且分配责任. 纯责任链和非纯责任链 责任链分为两种.纯责任链和非纯责任链. 纯责任链是待处理对象request在处理对象handler链上传递,每一个处理对象handler处理request的一部分,到终于处理完毕.非纯责任链则是待处理对象reques

[设计模式] 责任链模式之变种 - 责任链子

今天看到 wikipedia 的责任链模式,好奇之下搜寻相关文章,此文章主要参考 91大的 [.NET]重构之路系列v11 –用责任链模式打破讨厌的switch case 的变种作法,所以跟原本的责任链模式的设计思路不太相同,但结果相同, 所以阅读前,建议先看完91大的文章后,在来看这篇会比较能感觉出差异. ?这边先引用91大文章结尾结论中的补充来复习一下责任链的重点, 20120415 补充:责任链的用意在于把每个角色的职责分清楚,每个对象只需要做好自己的事,透过责任链的方式来组合,并完成使用

24天学会设计模式------责任链模式

林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka/article/details/43210027 一.责任链模式(Chain of Responsibility Pattern) 1.简介 从名字上大概也能猜出这个模式的大概模样--系统中将会存在多个有类似处理能力的对象.当一个请求触发后,请求将在这些对象组成的链条中传递,直到找到最合适的"责任"对象,并进行处理.<设计模式>中给它的定义如下:使多个对象都有机会处理请

Java与设计模式-责任链模式

责任链模式属于行为型设计模式之一,怎么理解责任链?责任链是可以理解成数个对象首尾连接而成,每一个节点就是一个对象,每个对象对应不同的处理逻辑,直至有一个对象响应处理请求结束.这一种模式成为责任链模式. 生活中可以找到责任链模式的原型吗?这种例子很多,比如你要去买房子,首先是销售人员(对象1)接待你,你说想要百分之3的折扣,没问题,这时销售人员就有打百分之三折扣的权限,销售人员(对象1)进行处理.这时来了一个土豪,说要买10套,要百分之五的折扣,销售人员(对象1)没有百分之五折扣的权限,必须要想上

我的Java设计模式-责任链模式

今天来说说程序员小猿和产品就关于需求发生的故事.前不久,小猿收到了产品的需求. 产品经理:小猿,为了迎合大众屌丝用户的口味,我们要放一张图,要露点的. 小猿:......露点?你大爷的,让身为正义与纯洁化身的我做这种需求,还露点. 产品经理:误会误会,是放一张暴露一点点的,尺寸不大. 小猿:尼玛~能说清楚些吗,需求模棱两可的.不干,我要上报boss. 产品经理也一阵无语,这豆丁的事还上报boss.话说这上报也得走程序是吧,技术经理就不干了,"凭什么要跳过我,得经过我才能到boss".咦

设计模式-责任链模式在实际项目中的使用

最近一次迭代,参与了公司数据应用平台的开发,其中负责的一块功能早早的就完成了代码的编写工作,即将进入测试阶段,因为有时间思考和总结代码编写中遇到的难题,便想着将代码做一次重构:其中优化的一个功能就是关于数据平台敏感字段的收集 功能描述:数据平台敏感字段的收集: 提供 service 方法,查询是否需要扫描表做触发式收集,指定具体实例与库的表,随机取 N 行(1~max(id) 之间):a.对每一行的每一个字段的值(取非 null 非空的值)做正则匹配 b. 对每一行的每一个字段的值看是否包含了敏

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

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

设计模式 -- 责任链模式或者叫职责链模式(Chain of Responsibility(CoR))

什么是链?前后相连,一个连接下一个,其中包括多个节点,其实责任链模式也类似,他是多个对象之间相互关联,下一个对象的操作由上一个对象关联下来,上一个对象有个方法用于指向其他对象.职责链之间的前后关系是可以改变的,主要看上一节点主要指向哪个节点. android中事件分发就是责任链模式的具体表现: View的ontouchEvent返回值设置,如果为true,交个自己的消费事件的方法去处理,如果为false,则继续向下一个进行传递. 如何实现责任链模式: 比如责任链上有,A,B,C三个对象,如果A有

java设计模式--责任链模式

责任链模式:将能够处理同一类请求的对象连成一条链,如果不能处理则传递给链上的下一个对象. //请假对象 public class QingjiaRequest { private String name; private int days; private String reason; public QingjiaRequest(String name, int days, String reason) { this.name = name; this.days = days; this.rea

设计模式——责任链模式

责任链模式:将能够处理同一类请求的对象连成一条链所提交的请求沿着链传递,链上的对象逐个判断是否有能力处理该请求, 如果能则处理,如果不能则传递给链上的下一个对象.优点:将请求者和发送者解耦         简化对象的处理过程         可以通过改变链中的成员或成员的顺序来动态的新增或则删除责任. 缺点:不能保证请求一定会执行,可能或落到责任链之外. 不容易观察运行时的特征,处理请求的方法比较分散.实现方式:链表和非链表两种实现,但是使用集合和数组等非链表实现在实际开发中更方便更常用. 应用