Android设计模式系列(7)--SDK源码之命令模式
来源:互联网 发布:街机时代 知乎 编辑:程序博客网 时间:2024/06/06 03:02
命令模式,在.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).增加新的命令很容易。
- Android设计模式系列(7)--SDK源码之命令模式
- Android设计模式系列(7)--SDK源码之命令模式
- Android设计模式系列(7)--SDK源码之命令模式
- Android设计模式系列(7)--SDK源码之命令模式
- Android设计模式系列(5)--SDK源码之备忘录模式
- Android设计模式系列(2)--SDK源码之观察者模式
- Android设计模式系列(1)--SDK源码之组合模式
- Android设计模式系列(1)--SDK源码之组合模式
- Android设计模式系列(2)--SDK源码之观察者模式
- Android设计模式系列(5)--SDK源码之备忘录模式
- Android设计模式系列(10)--SDK源码之原型模式
- Android设计模式系列(9)--SDK源码之适配器模式
- Android设计模式系列(10)--SDK源码之原型模式
- Android设计模式系列--SDK源码之观察者模式
- Android设计模式系列(1)--SDK源码之组合模式
- Android设计模式系列(1)--SDK源码之组合模式
- Android设计模式系列(1)--SDK源码之组合模式
- Android设计模式系列(2)--SDK源码之观察者模式
- 注册表操作(VC_Win32)
- PYTHON 24点
- Android设计模式系列(6)--SDK源码之享元模式
- cvFindContours函数使用
- 通过NSTask用Cocoa执行perl脚本
- Android设计模式系列(7)--SDK源码之命令模式
- 12个最好的开源报表工具
- Android中回调接口的使用
- Jeckson使用技巧
- Android设计模式系列(8)--SDK源码之工厂方法模式
- 2014年八大最热门的大数据工作
- POJ 1703 Find them, Catch them (并查集&利用异或的性质优化)
- 不同统计图的使用场景
- Android设计模式系列(9)--SDK源码之适配器模式