Android设计模式——责任链模式。

跟小伙伴聊天听到一个责任链模式,感觉能避免大量if   else,这里用一个例子记录一下。

抽象处理者角色类:设置/获取继承者,处理实现。

    public abstract class Handler {  

        /** 
         * 持有下一个处理请求的对象(继承者) 
         */  
        protected Handler successor = null;  

        /** 
         * 取值方法 
         */  
        public Handler getSuccessor() {  
            return successor;  
        }  

        /** 
         * 设置下一个处理请求的对象 
         */  
        public void setSuccessor(Handler successor) {  
            this.successor = successor;  
        }  
        /** 
         * 处理聚餐费用的申请 
         * @param user    申请人 
         * @param fee     申请的钱数 
         * @return        成功或失败的具体通知 
         */  
        public abstract String handleFeeRequest(String user , double fee);  
    }  

具体处理者角:

    public class ProjectManager extends Handler {  
      
        @Override  
        public String handleFeeRequest(String user, double fee) {  
              
            String str = "";  
            //项目经理权限比较小,只能在500以内  
            if(fee < 500)  
            {  
                str = "成功:项目经理同意【" + user + "】的聚餐费用,金额为" + fee + "元"; 

            }else  
            {  
                //超过500,继续传递给级别更高的人处理  
                if(getSuccessor() != null)  
                {  
                    return getSuccessor().handleFeeRequest(user, fee);  
                }  
            }  
            return str;  
        }  
      
    }  

    public class DeptManager extends Handler {  
      
        @Override  
        public String handleFeeRequest(String user, double fee) {  
              
            String str = "";  
            //部门经理的权限只能在1000以内  
            if(fee < 1000)  
            {  
                //为了测试,简单点,只同意张三的请求  

                str = "成功:部门经理同意【" + user + "】的聚餐费用,金额为" + fee + "元";      

            }else  
            {  
                //超过1000,继续传递给级别更高的人处理  
                if(getSuccessor() != null)  
                {  
                    return getSuccessor().handleFeeRequest(user, fee);  
                }  
            }  
            return str;  
        }  
      
    }  

public class GeneralManager extends Handler {  
  
    @Override  
    public String handleFeeRequest(String user, double fee) {  
          
        String str = "";  
        //总经理的权限很大,只要请求到了这里,他都可以处理  
        if(fee >= 1000)  
        {  
            str = "成功:总经理同意【" + user + "】的聚餐费用,金额为" + fee + "元";      
            
        }else  
        {  
            //如果还有后继的处理对象,继续传递  
            if(getSuccessor() != null)  
            {  
                return getSuccessor().handleFeeRequest(user, fee);  
            }  
        }  
        return str;  
    }  
  
} 

    public class Client {  
      
        public static void main(String[] args) {  
            //先要组装责任链  
            Handler h1 = new GeneralManager();  
            Handler h2 = new DeptManager();  
            Handler h3 = new ProjectManager();  
            h3.setSuccessor(h2);  
            h2.setSuccessor(h1);  
              
            //开始测试  
            String test1 = h3.handleFeeRequest("张三", 300);  
            System.out.println("test1 = " + test1);  
              
            String test2 = h3.handleFeeRequest("张三", 700);  
            System.out.println("test2 = " + test2);  
              
            String test3 = h3.handleFeeRequest("张三", 1500);  
            System.out.println("test3 = " + test3);  

        }  
      
    }  


职责链灵活在哪
1. 改变内部的传递规则
在内部,项目经理完全可以跳过人事部到那一关直接找到总经理。
每个人都可以去动态地指定他的继任者。
2. 可以从职责链任何一关开始。
如果项目经理不在,可以直接去找部门经理,责任链还会继续,没有影响。
3.用与不用的区别
不用职责链的结构,我们需要和公司中的每一个层级都发生耦合关系。
如果反映在代码上即使我们需要在一个类中去写上很多丑陋的if….else语句。
如果用了职责链,相当于我们面对的是一个黑箱,我们只需要认识其中的一个部门,然后让黑箱内部去负责传递就好了


原帖:http://blog.csdn.net/jason0539/article/details/45091639

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值