10/21

软件设计 石家庄铁道大学信息学院

实验15:职责链模式
本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:
1、理解职责链模式的动机,掌握该模式的结构;
2、能够利用职责链模式解决实际问题。

[实验任务一]:财务审批
某物资管理系统中物资采购需要分级审批,主任可以审批1万元及以下的采购单,部门经理可以审批5万元及以下的采购单,副总经理可以审批10万元及以下的采购单,总经理可以审批20万元及以下的采购单,20万元以上的采购单需要开职工大会确定。现用职责链模式设计该系统。
实验要求:
1. 提交类图;

2. 提交源代码;
// 采购请求类
3. class PurchaseRequest {
4. private double amount;
5. private Approver approver;
6.
7. public PurchaseRequest(double amount) {
8. this.amount = amount;
9. }
10.
11. public void setApprover(Approver approver) {
12. this.approver = approver;
13. }
14.
15. public Approver getApprover() {
16. return approver;
17. }
18.
19. public double getAmount() {
20. return amount;
21. }
22.
23. public String requestApproval() {
24. return approver.requestApproval(this);
25. }
26. }
27.
28. // 审批人抽象类
29. abstract class Approver {
30. protected Approver successor;
31.
32. public void setSuccessor(Approver successor) {
33. this.successor = successor;
34. }
35.
36. public abstract String requestApproval(PurchaseRequest request);
37. }
38.
39. // 主任类
40. class Director extends Approver {
41. @Override
42. public String requestApproval(PurchaseRequest request) {
43. if (request.getAmount() <= 10000) {
44. return "Approved by Director";
45. } else if (successor != null) {
46. return successor.requestApproval(request);
47. }
48. return "Not approved";
49. }
50. }
51.
52. // 部门经理类
53. class DepartmentManager extends Approver {
54. @Override
55. public String requestApproval(PurchaseRequest request) {
56. if (request.getAmount() <= 50000) {
57. return "Approved by Department Manager";
58. } else if (successor != null) {
59. return successor.requestApproval(request);
60. }
61. return "Not approved";
62. }
63. }
64.
65. // 副总经理类
66. class DeputyGeneralManager extends Approver {
67. @Override
68. public String requestApproval(PurchaseRequest request) {
69. if (request.getAmount() <= 100000) {
70. return "Approved by Deputy General Manager";
71. } else if (successor != null) {
72. return successor.requestApproval(request);
73. }
74. return "Not approved";
75. }
76. }
77.
78. // 总经理类
79. class GeneralManager extends Approver {
80. @Override
81. public String requestApproval(PurchaseRequest request) {
82. if (request.getAmount() <= 200000) {
83. return "Approved by General Manager";
84. } else if (successor != null) {
85. return successor.requestApproval(request);
86. }
87. return "Not approved";
88. }
89. }
90.
91. // 职工大会类
92. class StaffMeeting extends Approver {
93. @Override
94. public String requestApproval(PurchaseRequest request) {
95. return "Approved by Staff Meeting";
96. }
97. }
98.
99. // 客户端代码
100. public class Main {
101. public static void main(String[] args) {
102. Approver director = new Director();
103. Approver departmentManager = new DepartmentManager();
104. Approver deputyGeneralManager = new DeputyGeneralManager();
105. Approver generalManager = new GeneralManager();
106. Approver staffMeeting = new StaffMeeting();
107.
108. director.setSuccessor(departmentManager);
109. departmentManager.setSuccessor(deputyGeneralManager);
110. deputyGeneralManager.setSuccessor(generalManager);
111. generalManager.setSuccessor(staffMeeting);
112.
113. PurchaseRequest request1 = new PurchaseRequest(5000);
114. request1.setApprover(director);
115. System.out.println(request1.requestApproval());
116.
117. PurchaseRequest request2 = new PurchaseRequest(50000);
118. request2.setApprover(director);
119. System.out.println(request2.requestApproval());
120.
121. PurchaseRequest request3 = new PurchaseRequest(150000);
122. request3.setApprover(director);
123. System.out.println(request3.requestApproval());
124.
125. PurchaseRequest request4 = new PurchaseRequest(250000);
126. request4.setApprover(director);
127. System.out.println(request4.requestApproval());
128. }
129. }
3. 注意编程规范。

 

posted @ 2024-10-21 17:28  Hbro  阅读(9)  评论(0)    收藏  举报