设计模式之---责任链模式

责任链模式,大家肯定都有听说过,web应用上的tomcat的filter可以理解为一个责任链模式,责任链模式就相当于一个处理链,一个对象从第一个处理对象开始,处理完之后传到第二个,直到最后一个,而且处理对象的顺序和数量可以任意改动。

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


使用场景:
  •      对个对象可以处理同一个请求,但具体哪个对象处理则在运行时动态决定  
  •      在请求处理者不明确的情况下向多个对象中的一个提交一个请求
  •      需要动态指定一组对象处理请求

UML图:
  
     新建一个工程,目录结构
     比如说构造一个抽象的领导者

public abstract class Leader {
       //上一级的领导处理者
       public Leader nextHanlder ;
      
       /**
       * 处理请求
       * */
       public final void handleRequest( int money ){
             if ( money <=limit()){
                  handle( money );
            } else {
                   if ( null != nextHanlder ){
                         nextHanlder .handle( money );
                  }
            }
      }

       public abstract int limit();
      
       public abstract void handle( int money );
}
在这个抽象的领导类里面只做了两件事。一是定义了两个抽象接口方法来确定一个领导者应有的行为和属性,二是声明看一个处理请求的方法来确定当前领导是否有能力处理报账请求,如果没有这权限,则将该请求转发给上级领导处理。

然后是领导的实现,这里只贴一个

/**
 * 老板
 * */
public class Leader1 extends Leader{

       @Override
       public int limit() {
             // TODO Auto-generated method stub
             return 10000;
      }

       @Override
       public void handle( int money ) {
             // TODO Auto-generated method stub
            System. out .println( "老板批复报销" + money + "元" );
      }
      
}

客户端

public class client {
       public static void main(String[] args ) {
             //构造领导者对象
            Leader1 liLeader1 = new Leader1();
            Leader2 liLeader2 = new Leader2();
            Leader3 liLeader3 = new Leader3();
            
             liLeader2 . nextHanlder = liLeader3 ;
             liLeader3 . nextHanlder = liLeader1 ;
            
             liLeader2 .handleRequest(500);
      }
}

运行结果这里就不贴了,这知识一个简单的责任链模式的实现。但是在日常应用里很少有纯的责任链模式,一般都有一些变动,比如像链表一样,从单向条链表--》双向链表-》树-》图类似的发展结构。这个只是一个指导思想而已,在安卓中责任链模式的实现比较典型的就是对触摸事件的分发处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值