【设计模式】责任链模式

责任链模式


2019-11-10  19:28:21  by冲冲

 

1、概念

案例:员工要报销8000元,公司规定2000元以下不用签字,2000~5000元需要部门主管签字,5000元以上需要总裁签字。

设计:三个审批人应该继承同一个抽象类,抽象类定义两个方法。①报销签字方法approve(),②审批人持有上层领导的引用,如果自己不能处理则提交领导处理setApprover()。

特点:审批人(环)只懂自己怎么审批(责任),处理不了的就递交给上层(链条)。

 

2、完整代码

 1 abstract class Approver {// 审批人抽象类
 2     protected String name;// 抽象出审批人的姓名。
 3     protected Approver nextApprover;// 下一个审批人,更高级别领导。
 4     public Approver(String name) {
 5         this.name = name;
 6     }
 7     protected Approver setNextApprover(Approver nextApprover) {
 8         this.nextApprover = nextApprover;
 9         return this.nextApprover;// 返回下个审批人,链式编程。
10     }
11     public abstract void approve(int amount);// 抽象审批方法由具体审批人子类实现
12 }
13 
14 class Staff extends Approver {
15     public Staff(String name) {
16         super(name);
17     }
18     @Override
19     public void approve(int amount) {
20         if (amount <= 1000) {
21             System.out.println("审批通过。【员工:" + name + "】");
22         } else {
23             System.out.println("无权审批,升级处理。【员工:" + name + "】");
24             this.nextApprover.approve(amount);
25           }
26   }
27 }
28 
29 class Manager extends Approver {
30     public Manager(String name) {
31         super(name);
32     }
33     @Override
34     public void approve(int amount) {
35         if (amount <= 5000) {
36             System.out.println("审批通过。【经理:" + name + "】");
37         } else {
38             System.out.println("无权审批,升级处理。【经理:" + name + "】");
39             this.nextApprover.approve(amount);
40         }
41     }
42 }
43 
44 class CEO extends Approver {
45     public CEO(String name) {
46         super(name);
47     }
48     @Override
49     public void approve(int amount) {
50         if (amount <= 10000) {
51             System.out.println("审批通过。【CEO:" + name + "】");
52         } else {
53             System.out.println("驳回申请。【CEO:" + name + "】");
54         }
55     }
56 }
57 
58 public class Chain {
59     public static void main(String[] args) {
60         Approver ring = new Staff("张飞");
61         ring.setNextApprover(new Manager("关羽")).setNextApprover(new CEO("刘备"));
62 
63         //高层接触不到也没必要接触,直接找员工张飞审批。
64         ring.approve(1000);
65         /***********************
66         审批通过。【员工:张飞】
67         ***********************/
68 
69         ring.approve(4000);
70         /***********************
71         无权审批,升级处理。【员工:张飞】
72         审批通过。【经理:关羽】
73         ***********************/
74 
75         ring.approve(9000);
76         /***********************
77         无权审批,升级处理。【员工:张飞】
78         无权审批,升级处理。【经理:关羽】
79         审批通过。【CEO:刘备】
80         ***********************/
81         
82         ring.approve(88000);
83         /***********************
84         无权审批,升级处理。【员工:张飞】
85         无权审批,升级处理。【经理:关羽】
86         驳回申请。【CEO:刘备】
87         ***********************/
88     }
89 }

 

posted @ 2019-11-10 19:50  Yadielr  阅读(189)  评论(0编辑  收藏  举报