Android设计模式系列(7)--SDK源码之命令模式

简介: 原文链接:http://www.cnblogs.com/qianxudetianxia/archive/2011/08/13/2135478.html命令模式,在.net,java平台的事件机制用的非常多,几乎每天都与之打交道。

原文链接: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定义如下:

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)
            thrownew IllegalThreadStateException();
        group.add(this);
        start0();//这个是本地方法,调用run方法
        if(stopBeforeStart) {
        stop0(throwableFromStop);
    }
    }
 
    //可选
    publi void run() {
    if(target != null) {
        target.run();
    }
    }
}

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

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

相关文章
|
1月前
|
数据采集 小程序 数据可视化
智慧校园电子班牌管理系统源码 Java Android原生
家长通过家长小程序端随时了解孩子在校的情况,实时接收学生的出勤情况,学生到校、离校时间。随时了解学生在校的表现、学生成绩排名,及时与教师沟通,关注孩子的健康成长。
18 0
智慧校园电子班牌管理系统源码 Java Android原生
|
27天前
|
安全 开发工具 Android开发
几个Flutter常见诊断错误与解决Android toolchain - develop for Android devices X Unable to locate Android SDK
几个Flutter常见诊断错误与解决Android toolchain - develop for Android devices X Unable to locate Android SDK
51 0
|
3天前
|
Java Shell Android开发
安卓逆向 -- 常用命令与分区目录
安卓逆向 -- 常用命令与分区目录
9 1
|
5天前
|
小程序 Java 数据挖掘
Java校园智慧管理云平台源码 小程序+android电子班牌系统
智慧校园技术架构 ❀后端:Java ❀框架:springboot ❀前端页面:vue +element-ui ❀小程序:小程序原生开发 ❀电子班牌:Java Android
16 0
|
1月前
|
开发框架 物联网 数据库
89个android学习样例源码
89个android学习样例源码
39 0
|
1月前
|
算法 Java 定位技术
分享104个益智休闲安卓游戏源码,总有一款适合你
分享104个益智休闲安卓游戏源码,总有一款适合你
31 1
|
1月前
|
编解码 移动开发 人工智能
分享4个策略经营、5动作冒险、8角色扮演、8体育竞速、18飞行射击和30棋牌安卓游戏源码
分享4个策略经营、5动作冒险、8角色扮演、8体育竞速、18飞行射击和30棋牌安卓游戏源码
26 0
|
1月前
|
编解码 移动开发 人工智能
android游戏源码
android游戏源码
42 0
|
1月前
|
算法 Java 定位技术
Android 安卓益智休闲源码
Android 安卓益智休闲源码
24 1
|
1月前
|
Android开发
Android源码学习(五):AVB2.0-libavb库介绍2
Android源码学习(五):AVB2.0-libavb库介绍2
46 0

相关产品

  • 云迁移中心