设计模式-责任链模式(Chain of Responsibility Pattern)

 责任链,扫码是链:就是一串接着一串,像自行车链一样。然而在生活中非常的常见,譬如在工厂流水线生产,上一个工序完成,然后才到下一个工序。你去政府企业或者找公司领导签字也都是责任链模模式。以及我开发那种步骤性质的开发,也都是责任链模式的最好适用场景。

设计图

上代码:

执行者

public interface ApprovalResponsibilityChain {
	
	/**
	 * 下一个生审批者
	 */
	String nextApproval();
}
public abstract class ResponsibilityChain implements ApprovalResponsibilityChain {
	
	   protected int leaveDays;
	   protected ApprovalResponsibilityChain next;
	   
	   public ResponsibilityChain(int leaveDays) {
		    this.leaveDays = leaveDays;
	   }
	   
	   abstract public void setNextHandler(ApprovalResponsibilityChain next);
}
public class GroupLeaderApproval extends ResponsibilityChain {

	public GroupLeaderApproval(int leaveDays) {
		super(leaveDays);
	}

	@Override
	public String nextApproval() {
		if(leaveDays < 3) {
			 return "组长有权审批通过";
		}
		System.out.print("经过组长审批 ==> ");
		return this.next.nextApproval();
	}

	@Override
	public void setNextHandler(ApprovalResponsibilityChain next) {
		this.next = next;
	}
}
public class DepartmentManagerApproval extends ResponsibilityChain {

	public DepartmentManagerApproval(int leaveDays) {
		super(leaveDays);
		
	}

	@Override
	public String nextApproval() {
		if(leaveDays <= 5) {
			return "部门经理有权限审批通过";
		}
		System.out.print("经过部门经理审批 ==> ");
		return next.nextApproval();
	}

	@Override
	public void setNextHandler(ApprovalResponsibilityChain next) {
		this.next = next;
		
	}
}
public class GeneralManagerApproval extends ResponsibilityChain {

	public GeneralManagerApproval(int leaveDays) {
		super(leaveDays);
	}

	@Override
	public String nextApproval() {
		if(leaveDays <= 10) {
			return "总经理有权审批通过";
		}
		System.out.print("经过总经理审批 ==> ");
		return next.nextApproval();
	}

	@Override
	public void setNextHandler(ApprovalResponsibilityChain next) {
		this.next = next;
	}

}
public class BossApproval extends ResponsibilityChain {

	public BossApproval(int leaveDays) {
		super(leaveDays);
	}

	@Override
	public String nextApproval() {
		System.out.println("经过老板审批 ");
		if(leaveDays > 10) {
			return "老板审批,此事需要特批,审核通过!";
		}
		return "搞什么,少于10天都要我审批";
	}

	@Override
	public void setNextHandler(ApprovalResponsibilityChain next) {
		 this.next = next;
	}

}

测试:

	public static void main(String[] args) {
		//员工请假
		int leaveDays = 16;//请假天数
		
		ResponsibilityChain group = new GroupLeaderApproval(leaveDays); 
		
		ResponsibilityChain departmentManager = new DepartmentManagerApproval(leaveDays);
		group.setNextHandler(departmentManager);//指定下一位审批者 部门经理
		
		ResponsibilityChain generalManager = new GeneralManagerApproval(leaveDays);
		departmentManager.setNextHandler(generalManager);//指定下一位审批者,总经理
		
		ResponsibilityChain boss = new BossApproval(leaveDays);
		generalManager.setNextHandler(boss); //指定下一位审批者,老板
		
	    System.out.println(group.nextApproval());
		
	}

运行结果:

经过组长审批 ==> 经过部门经理审批 ==> 经过总经理审批 ==> 经过老板审批 
老板审批,此事需要特批,审核通过!

责任链模式优点:

降低了代码的耦合,责任分工明确,程序更加灵活,可动态改变顺序。

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

树懒_Zz

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值