編輯:Android開發實例
命令模式,在.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應用程序可以在許多不同地區的許多設備上運行。為了使應用程序更具交互性,應用程序應該處理以適合應用程序將要使用的語言環境方面的文字,數字,文件等。在本章中,我
可以輕松地控制鈴聲音量和鈴聲配置文件,即:(無聲,震動,響亮等)在Android中。 Android提供了訪問這些控件AudioManager類。
登錄應用程序的屏幕,詢問憑據登錄到一些特定的應用。可能需要登錄到Facebook,微博等本章介紹了,如何創建一個登錄界面,以及如何管理安全問題和錯誤嘗試。首先,必須定義兩
登錄應用程序的屏幕,詢問憑據登錄到一些特定的應用。可能需要登錄到Facebook,微博等本章介紹了,如何創建一個登錄界面,以及如何管理安全問題和錯誤嘗試。首先,必須定義兩