责任链原理:

    1. 责任链模式是指使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。

    代码实例:

    购买请求

    1. package factorymode.simplefactory.chain;
    2. public class PurchaseRequest {
    3. private int type = 0;
    4. private int Number = 0;
    5. private float price = 0;
    6. private int ID = 0;
    7. public PurchaseRequest(int type, int number, float price) {
    8. this.type = type;
    9. Number = number;
    10. this.price = price;
    11. // this.ID = ID;
    12. }
    13. public float GetSum() {
    14. return Number * price;
    15. }
    16. public int getType() {
    17. return type;
    18. }
    19. public void setType(int type) {
    20. this.type = type;
    21. }
    22. public int getNumber() {
    23. return Number;
    24. }
    25. public void setNumber(int number) {
    26. Number = number;
    27. }
    28. public float getPrice() {
    29. return price;
    30. }
    31. public void setPrice(float price) {
    32. this.price = price;
    33. }
    34. public int getID() {
    35. return ID;
    36. }
    37. public void setID(int ID) {
    38. this.ID = ID;
    39. }
    40. }

    处理对象的父类

    1. package factorymode.simplefactory.chain;
    2. public abstract class Approver {
    3. Approver successor;
    4. String name;
    5. public Approver(String name) {
    6. this.name = name;
    7. }
    8. public abstract void ProcesssRequest(PurchaseRequest request);
    9. public void SetSuccessor(Approver successor) {
    10. this.successor = successor;
    11. }
    12. }

    组长请求者

    1. package factorymode.simplefactory.chain;
    2. public class GroupApprover extends Approver {
    3. public GroupApprover(String name) {
    4. super(name);
    5. }
    6. @Override
    7. public void ProcesssRequest(PurchaseRequest request) {
    8. if ( request.GetSum() < 5000 ) {
    9. System.out.println("This request " + request.getID()
    10. + "will be handled by " + this.name);
    11. } else {
    12. successor.ProcesssRequest(request);
    13. }
    14. }
    15. }

    部长请求者

    1. package factorymode.simplefactory.chain;
    2. public class DepartmentApprover extends Approver {
    3. public DepartmentApprover(String name) {
    4. super(name);
    5. }
    6. @Override
    7. public void ProcesssRequest(PurchaseRequest request) {
    8. if ( ( 5000 <= request.GetSum()) && (request.GetSum() < 10000) ) {
    9. System.out.println("This request " + request.getID()
    10. + "will be handled by " + this.name);
    11. } else {
    12. successor.ProcesssRequest(request);
    13. }
    14. }
    15. }

    发送请求客户端

    1. package factorymode.simplefactory.chain;
    2. public class Client {
    3. public Client() {
    4. }
    5. public PurchaseRequest sendRequest(int type, int Number, float price ) {
    6. return new PurchaseRequest(type, Number, price);
    7. }
    8. }

    主程序

    1. package factorymode.simplefactory.chain;
    2. public class Main {
    3. public static void main(String[] args) {
    4. Client mclient = new Client();
    5. Approver groupleader = new GroupApprover("Tom");
    6. Approver departmentleader = new DepartmentApprover("Jerry");
    7. groupleader.SetSuccessor(departmentleader);
    8. departmentleader.SetSuccessor(groupleader);
    9. groupleader.ProcesssRequest(mclient.sendRequest(1,100, 40));
    10. groupleader.ProcesssRequest(mclient.sendRequest(2,200,40));
    11. }
    12. }