Android學習按鍵事件監聽與Command模式
一 Command模式
意圖:
將一個請求封裝為一個對象,從而使你可用不同的請求對客戶進行參數化;
對請求排隊或記錄請求日誌,以及支援可撤銷的操作。
將請求被封裝成一個對象,當向某對象提交請求時,使我們可以不用去知道被具體的請求的操作或者請求的接收者,
實現了動作的要求者對象和動作的執行者對象之間的解耦合。
適用性:
- 使用Command模式代替callback形式的回調應用;
- 在不同的時刻指定、排列和執行請求,動態變更要求;
- 支援取消操作;
- 支援修改日誌,儲存請求執行過程以便恢複操作;
- Command模式支援一組事務的叫用作業。且易於增加擴充新事務;
(何為事務參考:http://book.51cto.com/art/201202/319377.htm)
結構:
說明:
Command:命令的封裝者,聲明命令執行的操作介面;
ConcreteCommand:使命令的具體接收者執行相應的動作;
Invoke:發出執行該命令的請求,儲存具體命令執行者的抽象父類;
Receiver:實施與執行具體相關請求的具體操作,由命令對象建立者指定;
通過此圖可以到此模式的核心:實現操作對象的調用Invoke與具體實施該操作的對象Receiver之間解耦,
是通過增加Command,將動作執行委託給Command來執行調用真正的動作執行者。
二 Android中OnClickListener
在View類中:
public interface OnClickListener {
void onClick(View v);
}
作用:Interface definition for a callback to be invoked when a view is clicked.
就是一個click事件的回調介面。
在需要響應click事件的View中,都需要註冊一個相應的ClickListener來監聽click事件發生時被調用。
看一下面這段代碼:Button控制項
public class MyActivity extends Activity { protected void onCreate(Bundle icicle) { super.onCreate(icicle); setContentView(R.layout.content_layout_id); final Button button = (Button) findViewById(R.id.button_id); //註冊click事件監聽器 button.setOnClickListener(new View.BtnOnClickListener()); } private class BtnOnClickListener extends OnClickListener{ public void onClick(View v) { // Perform action on click } }}
看一下相應的這個結構:
這裡面View就是Invoke,OnClickListener就是Command,MyActivity就是Receiver。
執行過程如下:
可以看到這種方式的應用屬於:
Command模式替換Callback函數形式的回調模型,讓架構結構變得更清晰更靈活。