Android开发经验谈工作生活Android技术知识

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

2019-07-22  本文已影响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.缺点:请求处理中涉及遍历,遍历太多可能会影响性能

上一篇下一篇

猜你喜欢

热点阅读