zoukankan      html  css  js  c++  java
  • JAVA设计模式之责任链模式

    责任链模式:是一种对象的行为模式。在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织和分配责任。

    简单例子:

      1 public class Request 
      2 {
      3     private String name;
      4     private String reason;
      5     private int duration;
      6 
      7     public String getName() 
      8     {
      9         return name;
     10     }
     11     
     12     public void setName(String name) 
     13     {
     14         this.name = name;
     15     }
     16     
     17     public String getReason() 
     18     {
     19         return reason;
     20     }
     21     
     22     public void setReason(String reason)
     23     {
     24         this.reason = reason;
     25     }
     26 
     27     public int getDuration() 
     28     {
     29         return duration;
     30     }
     31 
     32     public void setDuration(int duration) 
     33     {
     34         this.duration = duration;
     35     }
     36 }
     37 
     38 public abstract class Handler 
     39 {
     40     protected Handler successor;
     41 
     42     public void setSuccessor(Handler successor)
     43     {
     44         this.successor = successor;
     45     }
     46 
     47     public abstract void handle(Request request);
     48 }
     49 
     50 public class Supvisor extends Handler
     51 {
     52     @Override
     53     public void handle(Request request) 
     54     {
     55         if(request.getDuration() <= 1)
     56         {
     57             System.out.println("Supvisor will handle this request.");
     58         }
     59         else
     60         {
     61             System.out.println("Supvisor submits this request to ProjectManager.");
     62             successor.handle(request);
     63         }
     64     }
     65 }
     66 
     67 public class ProjectManager extends Handler
     68 {
     69     @Override
     70     public void handle(Request request) 
     71     {
     72         if(request.getDuration() <= 5)
     73         {
     74             System.out.println("ProjectManager will handle this request.");
     75         }
     76         else
     77         {
     78             System.out.println("ProjectManager submits this request to DepartmentManager.");
     79             successor.handle(request);
     80         }
     81     }
     82 }
     83 
     84 public class DepartmentManager extends Handler
     85 {
     86     @Override
     87     public void handle(Request request) 
     88     {
     89         System.out.println("Although busy, DepartmentManager must handle this request.");
     90     }
     91 }
     92 
     93 public class Test 
     94 {
     95     public static void main(String[] args)
     96     {
     97         Request req = new Request();
     98         req.setName("hxy");
     99         req.setReason("have a fever");
    100         req.setDuration(7);
    101         
    102         Handler dm = new DepartmentManager();
    103         Handler pm = new ProjectManager();
    104         pm.setSuccessor(dm);
    105         Handler sup = new Supvisor();
    106         sup.setSuccessor(pm);
    107         
    108         sup.handle(req);
    109     }
    110 }
  • 相关阅读:
    Java——字符串操作
    算法——Java实现队列
    算法——Java实现栈
    算法——线性表之链式存储结构
    算法——线性表之顺序存储结构
    Java——单双引号的区别
    Hystrix源码解析
    Eureka源码探索(一)-客户端服务端的启动和负载均衡
    dubbo源码研究(一)
    dubbo-springboot入门级demo
  • 原文地址:https://www.cnblogs.com/huoxiayu/p/5620280.html
Copyright © 2011-2022 走看看