介绍
命令模式(Command Pattern)是行为型模式之一
将一系列的方法调用封装,用户只需要调用一个方法执行,那么所又这些被封装的方法就会被挨个执行调用。
定义
将一个请求封装成一个对象,从而让用户使用不同的请求把客户端参数化,对请求排队或者记录请求日志,以及支持可撤销的操作。
Receiver: 接收者角色,负责执行或实施一个请求,执行逻辑,操作逻辑的方法的叫做 行动方法
Command: 命令角色,定义所有具体命令类的抽象接口
ConcreteCommand: 具体命令角色,实现了 Command,并在 execute 方法中调用接收者的角色的相关方法,在接收者和命令执行的具体行为之间加以弱耦合,excute 叫做 执行方法。比如 “关机操作” 实现,具体可能包含很多相关的操作,比如保存数据,关闭文件、结束进程等,如果将这一系列的具体逻辑处理看作接收者,那么调用这些具体逻辑的方法就可以看作是执行方法。
Invoker: 请求者角色,该类的职责就是调用命令对象执行具体请求。行动方法
Client: 客户端角色,发布命令
命令模式的应用就是将行为调用者与实现者解耦。
调用者是 Client,中间由 Invoker 来解耦,由 ConcreteCommand 按照逻辑操作各个 Receiver 完成具体的实现。
Android 源码中的命令模式
-
Android 事件机制中底层逻辑对事件的转发处理
硬件驱动担接收者 --> NotifyArgs 为抽象命令着 NotifyKeyArgs 为具体命令者 --> InputDispatcher 作为具体的接收者并封装具体的事件操作
-
PackageManagerService 中对包的处理
对包的相关处理由其内部类 PackageHandler 承担,对应命令角色
对包的安装、移动、测量由 PackageHandler 的具体实现类 InstallParams,MoveParams、MeasureParams 来实现
接收者为 PackageManagerService