首页 > 其他 > 详细

Chain of responsibility

时间:2020-06-29 20:31:35      阅读:61      评论:0      收藏:0      [点我收藏+]

Question

技术分享图片

Theory

技术分享图片


技术分享图片


技术分享图片

An Example

技术分享图片

// PurchaseRequest.java
public class PurchaseRequest {
    private int type;
    private float price = 0.0f;
    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;
    }

}
// Apporver.java
public abstract class Approver {
    protected Approver approver; // the next processor
    protected String name;

    public Approver(String name){
        this.name = name;
    }

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

    // process
    public abstract  void processRequest(PurchaseRequest purchaseRequest);
}
// DepartmentApprover.java
public class DepartmentApprover extends Approver {

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


    @Override
    public void processRequest(PurchaseRequest purchaseRequest) {
        if(purchaseRequest.getPrice() <= 5000){
            System.out.println("request id : " + purchaseRequest.getId() + " has been processed by " + this.name);
        }else {
            approver.processRequest(purchaseRequest);
        }
    }
}
// CollegeApprover.java
public class CollegeApprover extends Approver {

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


    @Override
    public void processRequest(PurchaseRequest purchaseRequest) {
        if(purchaseRequest.getPrice() > 5000 && purchaseRequest.getPrice() <=10000 ){
            System.out.println("request id : " + purchaseRequest.getId() + " has been processed by " + this.name);
        }else {
            approver.processRequest(purchaseRequest);
        }
    }
}
// ViceSchoolMasterApprover.java
public class ViceSchoolMasterApprover extends Approver {
    public ViceSchoolMasterApprover(String name){
        super(name);
    }


    @Override
    public void processRequest(PurchaseRequest purchaseRequest) {
        if(purchaseRequest.getPrice() > 10000 && purchaseRequest.getPrice() <=30000 ){
            System.out.println("request id : " + purchaseRequest.getId() + " has been processed by " + this.name);
        }else {
            approver.processRequest(purchaseRequest);
        }
    }
}
// SchoolMasterApprover.java
public class SchoolMasterApprover extends Approver {
    public SchoolMasterApprover(String name){
        super(name);
    }


    @Override
    public void processRequest(PurchaseRequest purchaseRequest) {
        if(purchaseRequest.getPrice() > 30000 ){
            System.out.println("request id : " + purchaseRequest.getId() + " has been processed by " + this.name);
        }else {
            approver.processRequest(purchaseRequest);
        }
    }
}
// Client.java
public class Client {
    public static void main(String[] args) {
        PurchaseRequest purchaseRequest = new PurchaseRequest(1, 31000f, 1 );
        DepartmentApprover tom = new DepartmentApprover("Tom");
        CollegeApprover jerry = new CollegeApprover("Jerry");
        ViceSchoolMasterApprover lucy = new ViceSchoolMasterApprover("Lucy");
        SchoolMasterApprover trump = new SchoolMasterApprover("Trump");

        tom.setApprover(jerry);
        jerry.setApprover(lucy);
        lucy.setApprover(trump);

        trump.setApprover(tom);// This will make it a circle, depend on your need


        tom.processRequest(purchaseRequest); // the output is: request id : 1 has been processed by Trump

    }

}

Use in Spring MVC

{{uploading-image-118965.png(uploading...)}}

Chain of responsibility

原文:https://www.cnblogs.com/nedrain/p/13209780.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!