定义
将一个请求封装成一个对象,从而让用户使用不同的请求把客户端参数化;对请求排队或者记录请求日志,以及支持可撤销的操作。命令模式是过程设计中的回调机制的一个面向对象的替代品。此模式实际上是将行为调用者与实现者解耦。
使用场景
(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对包的相关消息处理。
网友评论