码迷,mamicode.com
首页 > 其他好文 > 详细

设计模式—责任链模式

时间:2016-09-05 18:56:32      阅读:118      评论:0      收藏:0      [点我收藏+]

标签:

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

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

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

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

    }

}

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

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

 

设计模式—责任链模式

标签:

原文地址:http://www.cnblogs.com/PerkinsZhu/p/5843157.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!