// 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
}
}
{{uploading-image-118965.png(uploading...)}}
原文:https://www.cnblogs.com/nedrain/p/13209780.html