美文网首页Android开发经验谈工作生活Android技术知识
android 源码设计模式读书笔记(六)责任链模式

android 源码设计模式读书笔记(六)责任链模式

作者: 刘景昌 | 来源:发表于2019-07-22 15:35 被阅读5次

    定义:每个对象都有机会处理请求,从而避免了请求者与接收者之间的耦合关系。将这些对象连城一条链,并沿着这条链传递该请求,知道有对象处理他为止。
    应用场景:对个对象处理同一个请求,但具体由哪个对象处理在运行时动态决定。
    在请求处理者 不明确的情况下向多个对象提交一个请求
    需要动态指定一组对象处理请求
    责任链模式UML 图


    image.png

    具体实现 我认为可以用在我们的Vip等级权限设置
    我们先具体一个需求:
    暂时分两个个等级vip1 vip2 在签到的时候vip1加30记分 vip2 加60分 具体实现UML


    image.png
    具体实现
    两个基类
    public abstract  class AbstractHandler {
        //每个执行的里面都包含下一执行的队形
        public AbstractHandler nextHandler;
    
        public  final  void handleRequest(AbstractRequest abstractRequest){
            if(abstractRequest.getVipLevel() == getVipLevel()){
                handler(abstractRequest);
            }else{
                if(nextHandler != null){
                    nextHandler.handleRequest(abstractRequest);
                }else{
                    System.out.println("这件事情已经无法处理了");
                }
            }
    
        }
        //每个执行类具体的等级
        public abstract int getVipLevel();
        //每个执行类具体的执行方法
        public  abstract void  handler(AbstractRequest abstractRequest);
    }
    
    abstract  class AbstractRequest {
        private Object object;
    
        public AbstractRequest(Object object) {
            this.object = object;
        }
    
       public  Object getContent(){
            return object;
       }
        public abstract  int getVipLevel();
    }
    

    具体实现类

    public class Vip2Handler extends  AbstractHandler {
    
        @Override
        public int getVipLevel() {
            return 2;
        }
    
        @Override
        public void handler(AbstractRequest abstractRequest) {
            System.out.println("积分+60");
        }
    }
    
    public class Vip2Request extends AbstractRequest {
    
        public Vip2Request(Object object) {
            super(object);
        }
    
        @Override
        public int getVipLevel() {
            return 2;
        }
    }
    

    调用代码:

         AbstractHandler handler1 = new Vip1Handler();
         AbstractHandler handler2 = new Vip2Handler();
         handler1.nextHandler = handler2;
         AbstractRequest request1 =new Vip1Request("vip1");
         AbstractRequest request2 =new Vip1Request("vip2");
         handler1.handleRequest(request1);
         handler1.handleRequest(request2);
    

    优缺点:
    1.优点 代码中耦合度低 灵活性高
    2.缺点:请求处理中涉及遍历,遍历太多可能会影响性能

    相关文章

      网友评论

        本文标题:android 源码设计模式读书笔记(六)责任链模式

        本文链接:https://www.haomeiwen.com/subject/obglhctx.html