已知某企业的采购审批是分级进行的,即根据采购金额的不同由不同层次的主管人员来审批,主任可以审批5万元以下的(不包括5万元)的采购单,副董事长可以审批5万元至10万元(不包括10万元)的采购单,董事长可以审批10万元至50万元(不包括50万元)的采购单,50万元及以上的采购单就需要开会讨论决定。使用职责链模式模拟该审批过程。
package 责任链模式;
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 aRequest);
}
package 责任链模式;
public class PurchaseRequest {
private double amount;
private int number;
private String purpose;
public PurchaseRequest(){
}
public PurchaseRequest(double amount, int number, String purpose) {
this.amount = amount;
this.number = number;
this.purpose = purpose;
}
public double getAmount() {
// TODO Auto-generated method stub
return amount;
}
public int getNumber() {
// TODO Auto-generated method stub
return number;
}
public String getPurpose() {
// TODO Auto-generated method stub
return purpose;
}
}
package 责任链模式;
public class Director extends Approver {
public Director(String name) {
super(name);
}
@Override
public void processRequest(PurchaseRequest aRequest) {
if ((aRequest).getAmount()<50000){
System.out.println("主任"+this.name+"审批采购单:"+aRequest.getNumber()+",金额:"+aRequest.getAmount()+"元,采购目的:"+aRequest.getPurpose());
}else {
//否则交给下一个处理者进行处理
this.successor.processRequest(aRequest);
}
}
}
package 责任链模式;
public class Congress extends Approver {
public Congress(String name) {
super(name);
}
@Override
public void processRequest(PurchaseRequest aRequest) {
System.out.println("召开董事会审批采购单:"+aRequest.getNumber()+",金额:"+aRequest.getAmount()+"元,采购目的:"+aRequest.getPurpose());
}
}
package 责任链模式;
public class President extends Approver {
public President(String name) {
super(name);
}
@Override
public void processRequest(PurchaseRequest aRequest) {
if (aRequest.getAmount()<500000){
System.out.println("董事长"+this.name+"审批采购单:"+aRequest.getNumber()+",金额:"+aRequest.getAmount()+"元,采购目的:"+aRequest.getPurpose());
}else {
//否则交给下一个处理者进行处理
this.successor.processRequest(aRequest);
}
}
}
package 责任链模式;
public class VicePresident extends Approver {
public VicePresident(String name) {
super(name);
}
@Override
public void processRequest(PurchaseRequest aRequest) {
if (aRequest.getAmount()<100000){
System.out.println("副董事长"+this.name+"审批采购单:"+aRequest.getNumber()+",金额:"+aRequest.getAmount()+"元,采购目的:"+aRequest.getPurpose());
}else {
//否则交给下一个处理者进行处理
this.successor.processRequest(aRequest);
}
}
}
package 责任链模式;
public class Test {
public static void main(String[] args) {
PurchaseRequest p1=new PurchaseRequest(20000,10001,"购买《聊斋》");
PurchaseRequest p2=new PurchaseRequest(60000,10002,"购买《水浒传》");
PurchaseRequest p3=new PurchaseRequest(300000,10003,"购买《葵花宝典》");
PurchaseRequest p4=new PurchaseRequest(800000,10004,"购买《金刚经》");
Approver a=new Congress("董事会a");
Approver b=new President("董事长b");
Approver c=new VicePresident("副董事长c");
Approver d=new Director("主任");
d.setSuccessor(c);
c.setSuccessor(b);
b.setSuccessor(a);
a.processRequest(p1);
a.processRequest(p2);
a.processRequest(p3);
a.processRequest(p4);
}
}
java设计模式练习自留