责任链原理:
责任链模式是指使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。
代码实例:
购买请求
package factorymode.simplefactory.chain;
public class PurchaseRequest {
private int type = 0;
private int Number = 0;
private float price = 0;
private int ID = 0;
public PurchaseRequest(int type, int number, float price) {
this.type = type;
Number = number;
this.price = price;
// this.ID = ID;
}
public float GetSum() {
return Number * price;
}
public int getType() {
return type;
}
public void setType(int type) {
this.type = type;
}
public int getNumber() {
return Number;
}
public void setNumber(int number) {
Number = number;
}
public float getPrice() {
return price;
}
public void setPrice(float price) {
this.price = price;
}
public int getID() {
return ID;
}
public void setID(int ID) {
this.ID = ID;
}
}
处理对象的父类
package factorymode.simplefactory.chain;
public abstract class Approver {
Approver successor;
String name;
public Approver(String name) {
this.name = name;
}
public abstract void ProcesssRequest(PurchaseRequest request);
public void SetSuccessor(Approver successor) {
this.successor = successor;
}
}
组长请求者
package factorymode.simplefactory.chain;
public class GroupApprover extends Approver {
public GroupApprover(String name) {
super(name);
}
@Override
public void ProcesssRequest(PurchaseRequest request) {
if ( request.GetSum() < 5000 ) {
System.out.println("This request " + request.getID()
+ "will be handled by " + this.name);
} else {
successor.ProcesssRequest(request);
}
}
}
部长请求者
package factorymode.simplefactory.chain;
public class DepartmentApprover extends Approver {
public DepartmentApprover(String name) {
super(name);
}
@Override
public void ProcesssRequest(PurchaseRequest request) {
if ( ( 5000 <= request.GetSum()) && (request.GetSum() < 10000) ) {
System.out.println("This request " + request.getID()
+ "will be handled by " + this.name);
} else {
successor.ProcesssRequest(request);
}
}
}
发送请求客户端
package factorymode.simplefactory.chain;
public class Client {
public Client() {
}
public PurchaseRequest sendRequest(int type, int Number, float price ) {
return new PurchaseRequest(type, Number, price);
}
}
主程序
package factorymode.simplefactory.chain;
public class Main {
public static void main(String[] args) {
Client mclient = new Client();
Approver groupleader = new GroupApprover("Tom");
Approver departmentleader = new DepartmentApprover("Jerry");
groupleader.SetSuccessor(departmentleader);
departmentleader.SetSuccessor(groupleader);
groupleader.ProcesssRequest(mclient.sendRequest(1,100, 40));
groupleader.ProcesssRequest(mclient.sendRequest(2,200,40));
}
}