美文网首页IT部落Android知识Android技术知识
每日Android源码设计模式之-10、命令模式

每日Android源码设计模式之-10、命令模式

作者: Alexey | 来源:发表于2017-03-27 07:06 被阅读65次

    命令模式没有很多的条条框框,更为灵活多变,比如程序菜单命令,点击“关机”按钮以后,系统会执行一系列操作,暂停处理事件、保存配置、结束进程等等。


    定义:

    将一个请求封装成一个对象,从而让用户使用不同的请求把客户端参数化;对请求排队或者记录请求日志,以及支持可撤销的操作。

    使用场景:

    需要抽象出待执行的动作,然后以参数的形式提供出来,类似于过程设计中的回调机制。

    在不同时刻、排列和执行请求。一个命令对象可以有与初始请求无关的生存期。

    需要支持取消操作。

    支持修改日志功能,这样当系统崩溃时,这些修改可以被重做一遍。

    需要支持实务操作。

    类图:

    很简单,也就是Invoker请求者类,持有Command类的引用,Command类又持有Receiver类的引用。

    当Client调用使用Invoker类去调用方法的时候,先调用Command类的execute方法然后再去调用Receiver类的actioin方法。

    也就是由以往的直接调用变为中间多了一层Command类,使得调用与被调用者之间解耦开来。



    Android中对命令模式的使用都不是典型,有一些变种

    比如:Android的事件机制中低层逻辑对事件的转发处理,每种事件在屏幕上产生后都会由低层逻辑将其转化为一个NotifyArgs对象,它本身没有任何实现,只是定义了抽象的方法体:

    struct NotifyArgs(){

       virtual ~NotifyArgs(){}

       virtual void notify(const sp<InputListenerInterface>&listener) const = 0;

    }

    按键事件最终被转化为NotifyKeyArgs对象,他继承了NotifyKeyArgs。相当于一个命令者。

    而InputDispatcher承担了命令请求者的角色。里面执行notifyKey方法来请求命令。


    相关文章

      网友评论

        本文标题:每日Android源码设计模式之-10、命令模式

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