JAVA设计模式-Chain of Responsibility

  职责链模式顾名思义是一个链条,在这个链条上的所有节点都可以处理请求,但是在某一种情况下,哪一个节点来处理这个请求是运行时决定的,但是客户端不需要知道具体是谁来处理,他只需要将请求交给一个节点就行了,当这个节点可以处理时,它就处理并返回给客户端,当它不能处理时,将这个请求传给职责链上的下一个节点,依次下去,直到请求被处理或者达到链条的最后一个节点。

 

    例如,当我向我的上级经理要提出请半天假的时候,这种事情他批准就行了,它可以直接给我回复;当我要请一个星期假的时候,他就没权力批准了,因此他向他的经理转交这个请求,他的经理同意之后给我回复;如果我提出要加薪的时候,我的经理和我的经理的经理也搞不定,他只有再向上一层回报,也就是总经理,总经理拿到这个请求之后会判断同意或者不同意,然后给我回复。这就是职责链,下面的代码就是模拟这个情况。

 

   

  1. package chainOfResponsebility;  
  2.   
  3. class Request {     
  4.   
  5.     private String name;     
  6.     private String requestType;     
  7.     private int number;   
  8.   
  9.     public String getName() {     
  10.         return name;     
  11.     }     
  12.     public void setName(String name) {     
  13.         this.name = name;     
  14.     }     
  15.     public String getRequestType() {     
  16.         return requestType;     
  17.     }     
  18.     public void setRequestType(String requestType) {     
  19.         this.requestType = requestType;     
  20.     }     
  21.     public int getNumber() {     
  22.         return number;     
  23.     }     
  24.     public void setNumber(int number) {     
  25.         this.number = number;     
  26.     }   
  27. }     
  28.   
  29. abstract class Manager {  
  30.   
  31.     protected String name;  
  32.     //管理者的上级   
  33.     protected Manager superior;  
  34.   
  35.     public Manager(String name) {  
  36.         this.name=name;  
  37.     }  
  38.     //设置管理者的上级   
  39.     public void SetSuperior(Manager superior){  
  40.         this.superior=superior;  
  41.     }  
  42.     //声请请求   
  43.     abstract public void requestApplications(Request requset);  
  44. }   
  45.   
  46. //总经理      
  47. class GeneralManager extends Manager {     
  48.   
  49.     public GeneralManager(String name) {     
  50.         super(name);    
  51.     }     
  52.   
  53.     @Override    
  54.     public void requestApplications(Request request) {    
  55.         if(request.getRequestType().equals("请假")&&request.getNumber()<=7){  
  56.             System.out.println(request.getName()+request.getRequestType()+request.getNumber()+"被批准"+",GeneralManager,"+this.name);     
  57.         }else if(request.getRequestType().equals("加薪")&&request.getNumber()<=800){     
  58.             System.out.println(request.getName()+request.getRequestType()+request.getNumber()+"被批准"+",GeneralManager,"+this.name);     
  59.         }     
  60.         else{     
  61.             System.out.println(request.getName()+request.getRequestType()+request.getNumber()+"不批准"+",GeneralManager,"+this.name);   
  62.         }    
  63.     }     
  64. }     
  65.   
  66. //总监      
  67. class Majordomo extends Manager {     
  68.     public Majordomo(String name) {     
  69.         super(name);     
  70.     }     
  71.   
  72.     @Override    
  73.     public void requestApplications(Request request) {     
  74.         if(request.getRequestType().equals("请假")&&request.getNumber() <=5){     
  75.             System.out.println(request.getName()+request.getRequestType()+request.getNumber()+"被批准"+",Majordomo,"+this.name);     
  76.         }else{     
  77.             if(this.superior!=null){     
  78.                 this.superior.requestApplications(request);     
  79.             }     
  80.         }     
  81.     }     
  82. }     
  83.   
  84.   
  85.   
  86. //经理      
  87. class CommonManager extends Manager {     
  88.     public CommonManager(String name) {     
  89.         super(name);     
  90.     }     
  91.   
  92.     @Override    
  93.     public void requestApplications(Request request) {     
  94.         if(request.getRequestType().equals("请假")&& request.getNumber()<=2){     
  95.             System.out.println(request.getName()+request.getRequestType()+request.getNumber()+"被批准"+",CommonManager,"+this.name);     
  96.         }else{     
  97.             if(this.superior!=null){     
  98.                 this.superior.requestApplications(request);     
  99.             }     
  100.         }     
  101.     }     
  102. }    
  103.   
  104. public class Test{  
  105.     public static void main(String[]args){  
  106.   
  107.         CommonManager commonManager =new CommonManager("Tom");  
  108.         Majordomo majordomo =new Majordomo("Jerry");  
  109.         GeneralManager generalManager =new GeneralManager("Thomas");  
  110.           
  111.         //设置上下级   
  112.         commonManager.SetSuperior(majordomo);  
  113.         majordomo.SetSuperior(generalManager);  
  114.   
  115.         Request request = new  Request();  
  116.         request.setName("Vincent");  
  117.         request.setRequestType("请假");  
  118.         request.setNumber(1);  
  119.         commonManager.requestApplications(request);  
  120.     }  
  121. }  

 

    上面的代码打印结果是:

 

Vincent请假1被批准,CommonManager,Tom

 

    意味着这个请求我的上级就能处理,因此他没有向他的上级汇报,直接给我了结果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值