设计模式—责任链模式

摘要:
请求对象将请求提交给处理对象,所有处理对象依次进行判断。如果它在自己的处理范围内,它将处理请求,并结束向后传输请求。如果它不在自己的处理范围内,它将向下传输请求,直到处理完请求。注意责任链模式和装饰模式的区别:责任链是对请求对象的处理和过滤;装饰模式是待装饰对象的自由功能扩展。

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

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

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

实例说明:员工请假,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);

    }

}

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

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

免责声明:文章转载自《设计模式—责任链模式》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Android 虹软2.0人脸识别,注册失败问题 分析synchronized的作用数据收集 DBMS_STATS.GATHER_TABLE_STATS下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

责任链模式——更灵活的if else

责任链模式 责任链,顾名思义,就是用来处理相关事务责任的一条执行链,执行链上有多个节点,每个节点都有机会(条件匹配)处理请求事务,如果某个节点处理完了就可以根据实际业务需求传递给下一个节点继续处理或者返回处理完毕。 这种模式给予请求的类型,对请求的发送者和接收者进行解耦。属于行为型模式。 在这种模式中,通常每个接收者都包含对另一个接收者的引用。如果一个对象...

14-学生生病请假:责任链模式

14.1请假流程 学生生病了,需要请假,写了请假条交给班长处理。假如此时有三种情况: 1)是小病需要请假时间短,班长能够处理,就批准请假,否则交给老师处理; 2)老师实际查看学生的情况,如果可以处理,就批准请假,如果不能处理,则需要请示校长; 3)校长处理那些老师处理不了的请假,给予学生请假批准。 这位,一个学生的请假流程就算完成了。 14.2模式定义 责...

java责任链模式

简单解释:简单来说就是该设计模式用于对某个对象或者请求进行一系列的处理,这些处理逻辑正好组成一个链条 传统实现 假设这样的场景:传入了一段内容,需要对这段文本进行加工;比如过滤敏感词、错别字修改、最后署上版权等操作。 常见的写法如下: public class Main { public static void main(String[] args) {...