Java大数据平台开发 学习笔记(55)—— java设计模式(职责链模式)知识汇总

一,前言:

职责链模式的注意事项和细节:

优点:

  1. 将请求与处理分开,实现了解耦,提高系统的灵活性。
  2. 简化了对象,使对象无需知道链的结构。

缺点:

  1. 当链比较长的时候,性能会受到影响。
  2. 采用了类似递归的方式,调试逻辑比较复杂。

二,职责链模式:

2.1,UML图:

在这里插入图片描述

2.2、代码实例:

Step 1) 创建 Approver 抽象类:

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 processRequset(PurchaseRequest purchaseRequest);
}

Step 2) 创建 DepartmentApprover 实现类:

public class DepartmentApprover extends Approver{
    
    

    public DepartmentApprover(String name) {
    
    
        super(name);
    }

    @Override
    public void processRequset(PurchaseRequest purchaseRequest) {
    
    
        if(purchaseRequest.getPrice() <= 5000){
    
    
            System.out.println("请求编号 id = " + purchaseRequest.getId() + " 被 " + this.name + "处理 !");
        }else {
    
    
            approver.processRequset(purchaseRequest);
        }
    }
}

Step 3) 创建 CollegeApprovor 实现类:

public class CollegeApprovor extends Approver{
    
    
    public CollegeApprovor(String name) {
    
    
        super(name);
    }

    @Override
    public void processRequset(PurchaseRequest purchaseRequest) {
    
    
        if(purchaseRequest.getPrice() > 5000 && purchaseRequest.getPrice() <= 10000){
    
    
            System.out.println("请求编号 id = " + purchaseRequest.getId() + " 被 " + this.name + "处理 !");
        }else {
    
    
            approver.processRequset(purchaseRequest);
        }
    }
}

Step 4) 创建 SchoolMasterApprovor 实现类:

public class SchoolMasterApprovor extends Approver{
    
    
    public SchoolMasterApprovor(String name) {
    
    
        super(name);
    }

    @Override
    public void processRequset(PurchaseRequest purchaseRequest) {
    
    
        if(purchaseRequest.getPrice() > 30000){
    
    
            System.out.println("请求编号 id = " + purchaseRequest.getId() + " 被 " + this.name + "处理 !");
        }else {
    
    
            approver.processRequset(purchaseRequest);
        }
    }
}

Step 5) 创建 ViceSchoolMasterApprovor 实现类:

public class ViceSchoolMasterApprovor extends Approver{
    
    
    public ViceSchoolMasterApprovor(String name) {
    
    
        super(name);
    }

    @Override
    public void processRequset(PurchaseRequest purchaseRequest) {
    
    
        if(purchaseRequest.getPrice() > 10000 && purchaseRequest.getPrice() <= 30000){
    
    
            System.out.println("请求编号 id = " + purchaseRequest.getId() + " 被 " + this.name + "处理 !");
        }else {
    
    
            approver.processRequset(purchaseRequest);
        }
    }
}

Step 6) 创建 PurchaseRequest 类:

public class PurchaseRequest {
    
    
    private int type;
    private float price = 0.0f;
    private int id = 0;

    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;
    }
}

Step 7) 创建 main 方法:

public class Client {
    
    
    public static void main(String[] args) {
    
    
        PurchaseRequest purchaseRequest = new PurchaseRequest(1, 31000, 1);
        DepartmentApprover departmentApprover = new DepartmentApprover("张主任");
        CollegeApprovor collegeApprovor = new CollegeApprovor("李院长");
        ViceSchoolMasterApprovor viceSchoolMasterApprovor = new ViceSchoolMasterApprovor("王副校");
        SchoolMasterApprovor schoolMasterApprovor = new SchoolMasterApprovor("杜校长");

        departmentApprover.setApprover(collegeApprovor);
        collegeApprovor.setApprover(viceSchoolMasterApprovor);
        viceSchoolMasterApprovor.setApprover(schoolMasterApprovor);
        schoolMasterApprovor.setApprover(departmentApprover);

        departmentApprover.processRequset(purchaseRequest);
    }
}


•由 ChiKong_Tam 写于 2020 年 10 月 23 日

猜你喜欢

转载自blog.csdn.net/qq_42209354/article/details/109248214