美文网首页Android 设计模式
Android设计模式-责任链模式

Android设计模式-责任链模式

作者: 星宇V | 来源:发表于2019-10-31 15:51 被阅读0次

    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图

    责任链模式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设计模式-责任链模式

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