quote from:http://www.cnblogs.com/qianxudetianxia/archive/2011/08/13/2135478.html

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

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

2.结构


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


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

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

?
1
2
3
public interface Runnable {
    public abstract void run();
}

调用者Thread简化版代码:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
//命令模式这里不需要继承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).增加新的命令很容易。

转载于:https://www.cnblogs.com/it-tomorrow/archive/2013/06/09/3128797.html

Android设计模式--之命令模式相关推荐

  1. Android设计模式之——命令模式

    一.介绍 命令模式(Command Pattern),是行为型设计模式之一.命令模式相对于其他的设计模式来说并没有那么多的条条框框,其实它不是一个很"规范"的模式,不过,就是基于这 ...

  2. 设计模式 之 命令模式

    2019独角兽企业重金招聘Python工程师标准>>> 设计模式 之 命令模式 命令模式比较简单,不过多赘述 为什么需要命令模式 将"行为请求者"与"行 ...

  3. 乐在其中设计模式(C#) - 命令模式(Command Pattern)

    原文:乐在其中设计模式(C#) - 命令模式(Command Pattern) [索引页] [源码下载] 乐在其中设计模式(C#) - 命令模式(Command Pattern) 作者:webabcd ...

  4. 23种设计模式之命令模式和策略模式的区别

    文章目录 概述 命令模式 策略模式 相同点 总结 概述 命令模式和策略模式确实很相似,只是命令模式多了一个接收者(Receiver)角色.它们虽然同为行为类模式,但是两者的区别还是很明显的.策略模式的 ...

  5. 设计模式之命令模式(Command)摘录

    23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于如何创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而 ...

  6. plsql执行command命令控制台出现乱码_设计模式系列 — 命令模式

    点赞再看,养成习惯,公众号搜一搜[一角钱技术]关注更多原创技术文章.本文 GitHub org_hejianhui/JavaStudy 已收录,有我的系列文章. 前言 23种设计模式速记 单例(sin ...

  7. 设计模式复习-命令模式

    #pragma once #include "stdafx.h" #include<set> #include<string> #include<io ...

  8. Java 设计模式之命令模式

    一.了解命令模式 1.1 什么是命令模式 命令模式将"请求"封装成对象,以便使用不同的请求.队列或者日志来参数化其他对象.命令模式也支持可撤销的操作.这种说法比较难以理解,换种说法 ...

  9. 设计模式:命令模式(Command)

    欢迎支持笔者新作:<深入理解Kafka:核心设计与实践原理>和<RabbitMQ实战指南>,同时欢迎关注笔者的微信公众号:朱小厮的博客. 欢迎跳转到本文的原文链接:https: ...

最新文章

  1. CUDA上深度学习模型量化的自动化优化
  2. 如何通过代码注册或取消事件?
  3. oracle M4,oracle高级部分 - osc_9gm4ypss的个人空间 - OSCHINA - 中文开源技术交流社区...
  4. bootstrap禁用点击空白处关闭模态框
  5. jQuery以Post方式发送请求并获取返回的文件供下载!
  6. 马来西亚热情拥抱阿里巴巴 马云倡议的eWTP首次落地海外
  7. transmac使用方法_Mac苹果电脑降级方法?
  8. SonarQube启动报错:WrapperSimpleApp: Encountered an error running main: java.nio.file.AccessDeniedExcepti
  9. 在fritzing中怎么导入_电路图制作软件(Fritzing)
  10. urllib2的Post和Get请求
  11. JNI系列(1):基础篇
  12. idea springboot启动报SLF4J:Failed to load class “org.slf4j.impl.StaticLoggerBinder”
  13. 笔记本电脑连接WIFI速度很慢-解决办法 亲测有效【5MB/S直达10MB/S】
  14. MAC抓包工具charles(青花瓷)
  15. RTKLIB-学习笔记
  16. QT 5.14 高仿 Win10 计算器(标准、科学、程序员、货币、容量)
  17. 玩烂vue之vue练手项目
  18. Mysql 无法连接的极简操作
  19. wpp trace在windbg输出的方法
  20. (前端)html与css,html 5、h、p标签,与_img路径

热门文章

  1. 应用需要android权限,如何找出android应用程序需要的权限
  2. 电脑右下,电脑右下图标怎么显示出来怎么办
  3. java 二进制输入_把从键盘输入的一个二进制数赋给变量A 然后如何转换为其他进制...
  4. Leetcode-213:打家劫舍 II
  5. pythoncv2模块详细介绍_【Opencv】【Python】Python中opencv模块cv2一些函数用法及简介...
  6. scala Set入门到熟悉
  7. Const限定符与C++11Constexpr的区别
  8. python项目实战:实现数据可视化三维拟合
  9. 升级nodejs的方法(3)
  10. 《网页设计心理学》一1.6 你最近是否有过灵光一现?