Android设计模式-责任链模式

UML关系简单介绍
UML简单使用的介绍
创建型设计模式
Android设计模式-单例模式
Android设计模式-工厂模式
Android设计模式-抽象工厂模式
Android设计模式-建造者模式
Android设计模式-原型模式
结构型设计模式
Android设计模式-代理模式
Android设计模式-装饰模式
Android设计模式-适配器模式
Android设计模式-组合模式
Android设计模式-门面模式
Android设计模式-桥接模式
Android设计模式-享元模式
行为型设计模式
Android设计模式-策略模式
Android设计模式-命令模式
Android设计模式-责任链模式
Android设计模式-模版方法模式
Android设计模式-迭代器模式
Android设计模式-观察者模式
Android设计模式-备忘录模式
Android设计模式-中介者模式
Android设计模式-访问者模式
Android设计模式-状态模式
Android设计模式-解释器模式

1.定义

使多个对象都有机会处理请求,从而避免了请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有对象处理它位置。

责任链模式UML图

Android设计模式-责任链模式_第1张图片
责任链模式UML图

角色介绍

  • Handler 抽象处理者,抽象出问题处理的方法,并持有下一个处理者的引用
  • ConcreteHandler 具体处理者,继承抽象,并实现具体的方法
  • Client 客户端,调用的地方0.0
    责任链的核心在具体处理者上,链是由多个具体处理者组成的。

3.简单实现

3.1抽象处理者

public abstract class Handler {
    private Handler nextHandler;


    public void setNextHandler(Handler nextHandler) {
        this.nextHandler = nextHandler;
    }
//此处结合了模版方法模式,后续介绍
    public final void handlerMessage(String request){
//此处的判断逻辑根据具体的业务修改,这里就是做个简单的示范
        if (request.contains("111")){
            System.out.println("本节点处理");
            dealMessage();
        }else {
            if (this.nextHandler!=null){
                System.out.println("传递到了下一节点");
                this.nextHandler.handlerMessage(request);

            }else {
                System.out.println("没有下一节点了。。。怎么处理看具体业务了");            
            }
        }
    }

    public abstract void dealMessage();
}

3.2具体处理者

public class ConcreteHandler1 extends Handler {
    @Override
    public void dealMessage() {
        System.out.println("节点1处理了任务");
    }
}


public class ConcreteHandler2 extends Handler {
    @Override
    public void dealMessage() {
        System.out.println("节点2处理了任务");
    }
}

3.3客户端调用

public class MyClass {
    public static void main(String args[]) {
//一般关于链的设置也不会在高层模块中设置,此处是做个示范
        Handler handler1=new ConcreteHandler1();
        Handler handler2=new ConcreteHandler2();
        handler1.setNextHandler(handler2);

        handler1.handlerMessage("111111");

        System.out.println("---------分割线--------");

        handler1.handlerMessage("222222");
    }
}


打印结果

本节点处理
节点1处理了任务
---------分割线--------
传递到了下一节点
没有下一节点了。。。怎么处理看具体业务了

具体使用中,一般关于链的设置也不会在高层模块中设置,而是封装出一个封装类,在需要使用的时候返回链的第一个节点对象即可正常使用。

4.总结

  • 优点 将请求和处理分开,请求者不用直到是谁处理的,处理者不用直到请求的全貌,两者解耦,提高了系统的灵活性。
  • 缺点 链条特长的时候很麻烦吧。。毕竟类似于递归

你可能感兴趣的:(Android设计模式-责任链模式)