• 2021.11.11(职责链模式java类实现)


    职责链模式Java代码编写:

    整体布局如下:

    (1)Approver.java:

    package shiyan15;
    
     
    
    public abstract class Approver {       //抽象处理者
    
     
    
    protected Approver successor;// 后继对象
    
    protected String name;
    
     
    
    public Approver(String name) {
    
    this.name = name;
    
    }
    
     
    
    // 设置后继者
    
    public void setSuccessor(Approver successor) {
    
    this.successor = successor;
    
    }
    
     
    
    // 抽象请求处理方法
    
    public abstract void processRequest(PurchaseRequest request);
    
    }

    (2)Client.java:

    package shiyan15;
    
     
    
    public class Client {
    
     
    
    public static void main(String[] args) {
    
    Approver wjzhang, rhuang, gyang, jguo, meeting;
    
    wjzhang = new Director("张三");
    
    rhuang = new Manager("李四");
    
    gyang = new VicePresident("马五");
    
    jguo = new President("李想");
    
    meeting = new Congress("职工大会");
    
     
    
    // 创建职责链
    
    wjzhang.setSuccessor(rhuang);
    
    rhuang.setSuccessor(gyang);
    
    gyang.setSuccessor(jguo);
    
    jguo.setSuccessor(meeting);
    
     
    
    // 创建采购单
    
    PurchaseRequest pr1 = new PurchaseRequest(5000, 10001, "购买A4纸十万张");
    
    wjzhang.processRequest(pr1);
    
     
    
    PurchaseRequest pr2 = new PurchaseRequest(40000, 10002, "购买打印机十台");
    
    wjzhang.processRequest(pr2);
    
     
    
    PurchaseRequest pr3 = new PurchaseRequest(90000, 10003, "购买咖啡机十台");
    
    wjzhang.processRequest(pr3);
    
     
    
    PurchaseRequest pr4 = new PurchaseRequest(180000, 10004, "购买电脑一百台");
    
    wjzhang.processRequest(pr4);
    
     
    
    PurchaseRequest pr5 = new PurchaseRequest(800000, 10005, "购买投影仪两百台");
    
    wjzhang.processRequest(pr5);
    
    }
    
    }

    (3)Congress.java

    package shiyan15;
    
     
    
    public class Congress extends Approver {
    
     
    
    public Congress(String name) {
    
    super(name);
    
    }
    
     
    
    @Override
    
    public void processRequest(PurchaseRequest request) {
    
    System.out.println("召开职工大会审批采购单:" + request.getNumber() + "," + "金额:" + request.getAmount() + "元,采购目的:"
    
    + request.getPurpose() + ".");
    
    }
    
     
    
    }

    (4)Director.java:

    package shiyan15;
    
     
    
    public class Director extends Approver {   //具体处理者
    
     
    
    public Director(String name) {
    
    super(name);
    
     
    
    }
    
     
    
    @Override
    
    public void processRequest(PurchaseRequest request) {
    
    if (request.getAmount() < 10000) {
    
    System.out.println("主任" + this.name + "审批采购单:" + request.getNumber() + "," + "金额:" + request.getAmount()
    
    + "元,采购目的:" + request.getPurpose() + ".");
    
    } else {
    
    this.successor.processRequest(request);// 转发请求
    
    }
    
     
    
    }
    
    }
    

    (5)Manager.java:

    package shiyan15;
    
     
    
    public class Manager extends Approver {
    
     
    
    public Manager(String name) {
    
    super(name);
    
    }
    
     
    
    @Override
    
    public void processRequest(PurchaseRequest request) {
    
    if (request.getAmount() < 50000) {
    
    System.out.println("部门经理" + this.name + "审批采购单:" + request.getNumber() + "," + "金额:" + request.getAmount()
    
    + "元,采购目的:" + request.getPurpose() + ".");
    
    } else {
    
    this.successor.processRequest(request);// 转发请求
    
    }
    
     
    
    }
    
     
    
    }

    (6)Prisident.java:

    package shiyan15;
    
     
    
    public class President extends Approver {
    
     
    
    public President(String name) {
    
    super(name);
    
    }
    
     
    
    @Override
    
    public void processRequest(PurchaseRequest request) {
    
    if (request.getAmount() < 200000) {
    
    System.out.println("总经理" + this.name + "审批采购单:" + request.getNumber() + "," + "金额:" + request.getAmount()
    
    + "元,采购目的:" + request.getPurpose() + ".");
    
    } else {
    
    }
    
    }
    
    }

    (7)PurchaseRequest.java:

    package shiyan15;
    
     
    
    public class PurchaseRequest {            //采购人员类
    
     
    
    private double amount;// 采购金额
    
    private int number;// 采购单编号
    
    private String purpose;// 采购目的
    
     
    
    public PurchaseRequest(double amount, int number, String purpose) {
    
    this.amount = amount;
    
    this.number = number;
    
    this.purpose = purpose;
    
    }
    
     
    
    public double getAmount() {
    
    return amount;
    
    }
    
     
    
    public void setAmount(double amount) {
    
    this.amount = amount;
    
    }
    
     
    
    public int getNumber() {
    
    return number;
    
    }
    
     
    
    public void setNumber(int number) {
    
    this.number = number;
    
    }
    
     
    
    public String getPurpose() {
    
    return purpose;
    
    }
    
    public void setPurpose(String purpose) {
    
    this.purpose = purpose;
    
    }
    
    }

    (8)VicePresident.java:

    package shiyan15;
    
     
    
    public class VicePresident extends Approver {
    
     
    
    public VicePresident(String name) {
    
    super(name);
    
    }
    
     
    
    @Override
    
    public void processRequest(PurchaseRequest request) {
    
    if (request.getAmount() < 100000) {
    
    System.out.println("副总经理" + this.name + "审批采购单:" + request.getNumber() + "," + "金额:" + request.getAmount()
    
    + "元,采购目的:" + request.getPurpose() + ".");
    
    } else {
    
    this.successor.processRequest(request);// 转发请求
    
    }
    
    }
    
    }

    (9)实现截图:

     

  • 相关阅读:
    servlet的监听器、过滤器、拦截器的区别
    根据一个单词找所有的兄弟单词的思想如何处理
    Maven deploy 部署 jar 到 Nexus 私服
    在vps上搭建hexo博客
    Java解决LeetCode72题 Edit Distance
    学以致用:Python爬取廖大Python教程制作pdf
    puppeteer截图
    Netty接收HTTP文件上传及文件下载
    Docker中执行Shell出现乱码
    Netty URL路由方案探讨
  • 原文地址:https://www.cnblogs.com/marr/p/15542067.html
Copyright © 2020-2023  润新知