• 设计模式-职责链模式


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

    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
  • 相关阅读:
    Web基础与Http协议
    1、Python 基础知识总结
    设计模式-代理模式
    论文检测系统是怎么检测呢?
    社群运营怎么做?
    测试面试题集锦(四)| Linux 与 Python 编程篇(附答案)
    全网最全抖音运营攻略
    【Linux】常见的用于定位网络问题的命令(概述)
    Tomcat 下载安装与配置
    计算机毕业设计django基于python街区医院管理系统(源码+系统+mysql数据库+Lw文档)
  • 原文地址:https://blog.csdn.net/weixin_45332508/article/details/137902869