命令模式,在.net,java平台的事件机制用的非常多,几乎每天都与之打交道。
android中对我印象最深的就是多线程多进程的环境,所以必然大量使用到Runbable,Thread,其实用的就是最简单的命令模式。
命令模式,Command Pattern,把请求封装为一个对象,多么巧妙的一个说法啊。

1.意图
将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作。
热门词汇:动作 事物 请求封装 排队 打包 异步

2.结构


Command接口提供了Execute方法,客户端通过Invoker调用命令操作来调用Recriver,绕了一大圈,但是却把具体对Receiver的操作请求封装在具体的命令中,是客户端对recriver的操作清晰简明。
但是在实际项目中,我们常常忽略Receiver,而把命令对象的目标对象直接设置为子类自己的成员变量或者作为execute()方法的临时变量。
以Android中的Runnable(在java.lang包下)为例,我们画出UML结构图如下:


想不到我们天天写的代码无意识中就是用到了命令模式,所谓模式,就是无所不在。

3.代码
命令接口Runnable定义如下:

public interface Runnable {    public abstract void run();}

调用者Thread简化版代码:

//命令模式这里不需要继承Runnable接口,但是这里考虑到实际情况,比如方便性等,继承了Runnable接口,实现了run方法,这个是Thread自身的运行run的方法class Thread implements Runnable {    private Runnable target;        public Thread(Runnable target) {        this.target = target;    }     public synchronized void start() {        if (threadStatus != 0 || this != me)            throw new IllegalThreadStateException();        group.add(this);        start0();//这个是本地方法,调用run方法        if (stopBeforeStart) {    stop0(throwableFromStop);}    }    //可选    public void run() {if (target != null) {    target.run();}    }}

  客户端只需要new Thread(new Runnable(){}).start()就开始执行相关的一系列的请求,这些请求大部分都是实现Runnable接口的匿名类。

4.效果
(1).行为型模式;
(2).将调用对象的操作和知道如何实现该操作的对象解耦;
(3).多个命令可以装配成一个复合命令;
(4).增加新的命令很容易。

更多相关文章

  1. GitHub 标星 2.5K+!教你通过玩游戏的方式学习 VIM!
  2. 如何在后台运行Linux命令?
  3. No.11 使用firewall配置的防火墙策略的生效模式
  4. Android心得4.1--文件的保存与读取及文件的操作模式详解.doc
  5. Android的IBinder接口及其安全性机制
  6. git下载Android源代码(含kernel)
  7. Android(安卓)OOM:内存管理分析和内存泄露原因总结
  8. java/android 设计模式学习笔记(5)---对象池模式
  9. 彻底弄懂Activity的启动模式和任务栈

随机推荐

  1. Android开发艺术探索学习笔记(十)
  2. Android Scroller类介绍
  3. android下通过xstream解析xml格式信息
  4. 类似的Timer循环服务设计
  5. Android官方入门文档[17]构建灵活的UI
  6. Android上如何查看CPU和内存信息
  7. 在Eclipse中导入整个Android系统代码
  8. Android 官方 Lambda支持方法
  9. android一些重要开源项目
  10. Android实现背景图与状态栏融合