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)实现截图:

 

原文地址:https://www.cnblogs.com/marr/p/15542067.html