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

2017-11-01  本文已影响0人  某翼

定义

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

使用场景

(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对包的相关消息处理。

上一篇下一篇

猜你喜欢

热点阅读