• 设计模式-职责链模式


    就是一个链表,指向下一个处理请求的节点,在节点内进行判断
    在这里插入图片描述
    设计类图
    在这里插入图片描述
    一个抽象的处理父类

    package com.ChainOfResponsibility;
    
    public abstract class Approver {
        //下一个处理人
        Approver approver;
        String name;
    
        public Approver(String name) {
            this.name = name;
        }
    
        //下一个处理者
        public void setApprover(Approver approver){
            this.approver = approver;
        }
    
        public abstract void processPurchaseRequest(PurchaseRequest purchaseRequest);
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    4个具体的处理子类:

    package com.ChainOfResponsibility;
    
    public class DepartmentApprover extends Approver {
    
        public DepartmentApprover(String name) {
            super(name);
        }
    
        
        public void processPurchaseRequest(PurchaseRequest purchaseRequest) {
            if (purchaseRequest.getPrice() <= 5000){
                System.out.println("请求编号id=" + purchaseRequest.getId() + "被" +this.name +"处理");
            }else {
                approver.processPurchaseRequest(purchaseRequest);
            }
    
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    package com.ChainOfResponsibility;
    
    public class CollegeApprover extends Approver {
    
        public CollegeApprover(String name) {
            super(name);
        }
    
        
        public void processPurchaseRequest(PurchaseRequest purchaseRequest) {
            if (purchaseRequest.getPrice() >= 5000 && purchaseRequest.getPrice() <=10000){
                System.out.println("请求编号id=" + purchaseRequest.getId() + "被" +this.name +"处理");
            }else {
                approver.processPurchaseRequest(purchaseRequest);
            }
    
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    package com.ChainOfResponsibility;
    
    public class ViceSchoolMasterApprover extends Approver {
    
        public ViceSchoolMasterApprover(String name) {
            super(name);
        }
    
        
        public void processPurchaseRequest(PurchaseRequest purchaseRequest) {
            if (purchaseRequest.getPrice() >= 10000 && purchaseRequest.getPrice() <=30000){
                System.out.println("请求编号id=" + purchaseRequest.getId() + "被" +this.name +"处理");
            }else {
                approver.processPurchaseRequest(purchaseRequest);
            }
    
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    package com.ChainOfResponsibility;
    
    public class SchoolMasterApprover extends Approver {
    
        public SchoolMasterApprover(String name) {
            super(name);
        }
    
    
        
        public void processPurchaseRequest(PurchaseRequest purchaseRequest) {
            if (purchaseRequest.getPrice() >= 30000){
                System.out.println("请求编号id=" + purchaseRequest.getId() + "被" +this.name +"处理");
            }else {
                approver.processPurchaseRequest(purchaseRequest);
            }
    
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    购买请求类

    package com.ChainOfResponsibility;
    
    public class PurchaseRequest {
    
        private int type;
        private float price;
        private int id;
    
        public PurchaseRequest(int type, float price, int id) {
            this.type = type;
            this.price = price;
            this.id = id;
        }
    
        public int getType() {
            return type;
        }
    
        public float getPrice() {
            return price;
        }
    
        public int getId() {
            return id;
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    客户端请求:

    package com.ChainOfResponsibility;
    
    public class Client {
        public static void main(String[] args) {
            //创建一个请求
            PurchaseRequest purchaseRequest = new PurchaseRequest(1, 30001, 1);
            //创建相关审批人
            DepartmentApprover departmentApprover = new DepartmentApprover("张主任");
            CollegeApprover collegeApprover = new CollegeApprover("李院长");
            ViceSchoolMasterApprover viceSchoolMasterApprover = new ViceSchoolMasterApprover("副校长");
            SchoolMasterApprover schoolMasterApprover = new SchoolMasterApprover("校长");
    
            //创建一个职责链
            departmentApprover.setApprover(collegeApprover);
            collegeApprover.setApprover(viceSchoolMasterApprover);
            viceSchoolMasterApprover.setApprover(schoolMasterApprover);
    
            departmentApprover.processPurchaseRequest(purchaseRequest);
            viceSchoolMasterApprover.processPurchaseRequest(purchaseRequest);
    
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
  • 相关阅读:
    一篇了解Java Web中的数据库开发的JDBC基础
    java.util.Properties类常用的方法
    Oracle数据库故障处理-swap占用较高,AIX内存溢出
    01OpenCV 加载图片并显示图片
    《HarmonyOS开发 – OpenHarmony开发笔记(基于小型系统)》第6章 环境监测系统
    配置文件的读取-TOML
    C++人事管理系统
    【JVM 系列】JVM 调优
    http协议 Header 常见属性(一) —— Content-Type、Content-Length
    【力扣周赛】第 360 场周赛(贪心 & ⭐树上倍增)
  • 原文地址:https://blog.csdn.net/weixin_45332508/article/details/137902869