首页 > 代码库 > 设计模式—责任链模式
设计模式—责任链模式
责任链模式:在请求对象不清楚处理对象是谁的情况下使用该模式。
请求对象把请求提交给处理对象,所有的处理对象依次进行判断,如果是自己的处理范围则进行处理,结束请求向后传递,如果不属于自己的处理范围则向下传递请求直到请求被处理。
注意区分责任链模式和装饰模式的区别:责任链是对请求对象的处理过滤;装饰模式是对被装饰对象的自由功能扩展。
实例说明:员工请假,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); }}
处理者一层一层的对请求进行过滤,直至被处理或者过滤结束
---------------------------
设计模式—责任链模式
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。