责任链原理:
责任链模式是指使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。
代码实例:
购买请求
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);}@Overridepublic 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);}@Overridepublic 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));}}
