11.13日报

今天完成了设计模式的实验十五,以下为今日实验内容:

实验15:职责链模式

本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:

1、理解职责链模式的动机,掌握该模式的结构;

2、能够利用职责链模式解决实际问题。

 
   

 

 

[实验任务一]:财务审批

某物资管理系统中物资采购需要分级审批,主任可以审批1万元及以下的采购单,部门经理可以审批5万元及以下的采购单,副总经理可以审批10万元及以下的采购单,总经理可以审批20万元及以下的采购单,20万元以上的采购单需要开职工大会确定。现用职责链模式设计该系统。

实验要求:

1.     提交类图;

 

2.     提交源代码;

  1. // 采购请求类
    class PurchaseRequest {
        private double amount;
        private Approver approver;

        public PurchaseRequest(double amount) {
            this.amount = amount;
        }

        public void setApprover(Approver approver) {
            this.approver = approver;
        }

        public Approver getApprover() {
            return approver;
        }

        public double getAmount() {
            return amount;
        }

        public void requestApproval() {
            approver.requestApproval(this);
        }
    }

    // 审批人抽象类
    abstract class Approver {
        protected Approver successor;

        public void setSuccessor(Approver successor) {
            this.successor = successor;
        }

        public abstract String requestApproval(PurchaseRequest request);
    }

    // 主任类
    class Director extends Approver {
        @Override
        public String requestApproval(PurchaseRequest request) {
            if (request.getAmount() <= 10000) {
                return "Director approved the request.";
            } else if (successor != null) {
                return successor.requestApproval(request);
            } else {
                return "Request denied.";
            }
        }
    }

    // 部门经理类
    class DepartmentManager extends Approver {
        @Override
        public String requestApproval(PurchaseRequest request) {
            if (request.getAmount() <= 50000) {
                return "Department Manager approved the request.";
            } else if (successor != null) {
                return successor.requestApproval(request);
            } else {
                return "Request denied.";
            }
        }
    }

    // 副总经理类
    class DeputyGeneralManager extends Approver {
        @Override
        public String requestApproval(PurchaseRequest request) {
            if (request.getAmount() <= 100000) {
                return "Deputy General Manager approved the request.";
            } else if (successor != null) {
                return successor.requestApproval(request);
            } else {
                return "Request denied.";
            }
        }
    }

    // 总经理类
    class GeneralManager extends Approver {
        @Override
        public String requestApproval(PurchaseRequest request) {
            if (request.getAmount() <= 200000) {
                return "General Manager approved the request.";
            } else if (successor != null) {
                return successor.requestApproval(request);
            } else {
                return "Request denied.";
            }
        }
    }

    // 职工大会类
    class StaffMeeting extends Approver {
        @Override
        public String requestApproval(PurchaseRequest request) {
            return "Staff meeting approved the request.";
        }
    }

    // 客户端代码
    public class Client {
        public static void main(String[] args) {
            Approver director = new Director();
            Approver departmentManager = new DepartmentManager();
            Approver deputyGeneralManager = new DeputyGeneralManager();
            Approver generalManager = new GeneralManager();
            Approver staffMeeting = new StaffMeeting();

            director.setSuccessor(departmentManager);
            departmentManager.setSuccessor(deputyGeneralManager);
            deputyGeneralManager.setSuccessor(generalManager);
            generalManager.setSuccessor(staffMeeting);

            PurchaseRequest request1 = new PurchaseRequest(5000);
            request1.setApprover(director);
            request1.requestApproval(); // Director approved the request.

           
    PurchaseRequest request2 = new PurchaseRequest(30000);
            request2.setApprover(director);
            request2.requestApproval(); // Department Manager approved the request.

           
    PurchaseRequest request3 = new PurchaseRequest(150000);
            request3.setApprover(director);
            request3.requestApproval(); // Deputy General Manager approved the request.

           
    PurchaseRequest request4 = new PurchaseRequest(250000);
            request4.setApprover(director);
            request4.requestApproval(); // Staff meeting approved the request.
       
    }
    }

 

3. 注意编程规范。

 

 

posted @ 2024-11-27 10:42  Code13  阅读(10)  评论(0)    收藏  举报