命令模式——《Android源码设计模式解析与实践》读书笔记11

定义

将一个请求封装成一个对象,从而让用户使用不同的请求把客户端参数化;对请求排队或者记录请求日志,以及支持可撤销的操作。命令模式是过程设计中的回调机制的一个面向对象的替代品。此模式实际上是将行为调用者与实现者解耦。


使用场景

(1)需要抽象出待执行的动作,然后以参数的形式提供出来时

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

(3)需要支持取消操作时

(4)支持修改日志功能

(5)需要支持事务操作时


UML类图


实现方式

命令接收类

public class Receiver{

    public void action(){ }

}

命令接口

public interface Command{

    void excute();

}

具体命令类

public class ConcreteCommand implements Command{

    private Receiver receiver;

    public ConcreteCommand(Receiver receiver){

        this.receiver= receiver;

    }

    @Override

    public void excute(){

        receiver.excute();

    }

}

命令执行类

public class Invoker{

    private Command command;

    public Invoker(Command command){

        this.command= command;

    }

    public void invoke(){

        command.excute();

    }

}

应用类

public class Client(){

    public static void main(String [] args){

        Receiver receiver = new Receiver();

        Command command = new ConcreteCommand(receiver);

        Invoker invoker = new Invoker(command);

        invoker.invoke();

    }

}

解释器模式的优缺点

优点

>更弱的耦合性

>更灵活的控制性

>更好的扩展性

缺点

>会生成大量的衍生类


Android中的解释器模型举例

Android系统源码中基本没有经典的命令模式实现,大多有一定的变种。比较典型的是Android的事件机制中底层逻辑对事件的转发处理以及PackageManageService对包的相关消息处理。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容