您的位置:首页 > 其它

二十三种设计模式之责任链模式

2017-08-14 19:42 288 查看
责任链模式:如果有多个对象都机会处理请求,责任链可使请求的发送者和接受者解耦,请求沿着责任链解耦,请求沿着责任链传递,直到有一个对象处理他位置.

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) {
super();
this.type = type;
this.Number = Number;
this.price = price;
}
public int getType() {
return type;
}
public float getSum() {
return Number*price;
}
public int getID() {
return (int)(Math.random()*1000);
}

}

public abstract class Approver {
Approver successor;
String Name;
public Approver(String Name) {
this.Name = Name;
}
public abstract void ProcessRequest(PurchaseRequest request);

public void SetSuccessor(Approver successor){
this.successor = successor;
}

}

public class GroupApprover extends Approver{

public GroupApprover(String Name) {
super(Name+" GroupLeader");
}

@Override
public void ProcessRequest(PurchaseRequest request) {
if(request.getSum()<5000){
System.out.println("**This request "+request.getID()
+" will be handled by"
+this.Name+"**");
}else{
successor.ProcessRequest(request);//后继处理者处理
}
}

}

public class DepartmentApprover extends Approver{

public DepartmentApprover(String Name) {
super(Name+" DepartmentLeader");
}

@Override
public void ProcessRequest(PurchaseRequest request) {
if((5000<=request.getSum()) && (request.getSum()<10000)){
System.out.println("**This request "+request.getID()
+" will be handled by"
+this.Name+"**");
}else{
successor.ProcessRequest(request);//后继处理者处理
}
}

}

public class VicePresidentApprover extends Approver {
public VicePresidentApprover(String Name) {
super(Name+" Vice President");
}

@Override
public void ProcessRequest(PurchaseRequest request) {
if((10000<=request.getSum()) && (request.getSum()<50000)){
System.out.println("**This request "+request.getID()
+" will be handled by"
+this.Name+"**");
}else{
successor.ProcessRequest(request);//后继处理者处理
}
}

}

public class PresidentApprover extends Approver{

public PresidentApprover(String Name) {
super(Name+"President");
// TODO Auto-generated constructor stub
}

@Override
public void ProcessRequest(PurchaseRequest request) {
// TODO Auto-generated method stub
if(50000<=request.getSum()){
System.out.println("**This request "+request.getID()
+" will be handled by"
+this.Name+"**");
}else{
successor.ProcessRequest(request);//后继处理者处理
}
}

}

public class Client {

public Client() {
// TODO Auto-generated constructor stub
}

public PurchaseRequest sendRequest(int Type,int Number,float price){
return new PurchaseRequest(Type, Number, price);
}

}

public class MainTest {

public static void main(String[] args) {
Client mClient = new Client();
Approver GroupLeader = new GroupApprover("Tom");
Approver DepratLeader = new DepartmentApprover("Jerry");
Approver VicePresident = new VicePresidentApprover("Kate");
Approver President = new PresidentApprover("Bush");

GroupLeader.SetSuccessor(DepratLeader);
DepratLeader.SetSuccessor(VicePresident);
VicePresident.SetSuccessor(President);
President.SetSuccessor(GroupLeader);

GroupLeader.ProcessRequest(mClient.sendRequest(1, 100, 40));
GroupLeader.ProcessRequest(mClient.sendRequest(2, 200, 40));
GroupLeader.ProcessRequest(mClient.sendRequest(3, 300, 40));
GroupLeader.ProcessRequest(mClient.sendRequest(4, 400, 140));

// VicePresident.ProcessRequest(mClient.sendRequest(1, 100, 40));

// VicePresident.ProcessRequest(mClient.sendRequest(2, 200, 40));

// VicePresident.ProcessRequest(mClient.sendRequest(3, 300, 40));

// VicePresident.ProcessRequest(mClient.sendRequest(4, 400, 140));
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: