Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android:Android涉及到的設計模式

Android:Android涉及到的設計模式

編輯:關於Android編程

組合模式

Android中對組合模式的應用,可謂是泛濫成粥,隨處可見,那就是View和ViewGroup類的使用。在android UI設計,幾乎所有的widget和布局類都依靠這兩個類。
組合模式,Composite Pattern,是一個非常巧妙的模式。幾乎所有的面向對象系統都應用到了組合模式。

將對象View和ViewGroup組合成樹形結構以表示”部分-整體”的層次結構(View可以做為ViewGroup的一部分)。
組合模式使得用戶對單個對象View和組合對象ViewGroup的使用具有一致性。

建造者模式

在Android中經常要使用AlertDialog來顯示一些簡單的窗口,通常的寫法類似下面的代碼 :

AlertDialog dialog = new AlertDialog.Builder(MainActivity.this).setTitle("提示")  
        .setMessage("確定退出?").create();  
dialog.show();  

可以看到dialog是通過Builder創建的,那麼Builder是如何同AlertDialog協同工作的呢?其實AlertDialog的創建就是使用Builder模式,廢話不多說,直接上代碼吧。

備忘錄模式

Activity的onSaveInstanceState和onRestoreInstanceState就是通過Bundle這種序列化的數據結構來存儲Activity的狀態。以便可以恢復Activity在onDestory之前保存的信息。

狀態模式

View.onVisibilityChanged方法,就是提供了一個狀態模式的實現,允許在View的visibility發生改變時,引發執行onVisibilityChanged方法中的動作。比如View的GONE,VISIBLE狀態發生改變時,行為改變。

單例模式

android中有很多系統級別的全局變量,如時間,輸入法,賬戶,狀態欄等等,android中對這些都直接或者有些間接用到了單例模式。

觀察者模式

在Android中,最典型的觀察者模式就是”廣播“。
(1)TimelineReceiver是觀察者;
(2)重寫OnReceive方法,來定義當收到狀態變化時,訂閱者的行為;

class TimelineReceiver extends BroadcastReceiver { // 1  
  @Override  
  public void onReceive(Context context, Intent intent) { // 2  
    cursor.requery(); // 3  
    adapter.notifyDataSetChanged(); // 4  
    Log.d("TimelineReceiver", "onReceived");  
  }  
}  

命令模式

android中用到許多多線程多進程,所以必然大量使用到Runbable,Thread。其實用的就是最簡單的命令模式。
這裡寫圖片描述

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接口的匿名類。

中介者模式

如Resource.getDrawable方法的實現邏輯是這樣的:創建一個緩存來存放所有已經加載過的,如果getDrawable中傳入的id所對應的Drawable以前沒有被加載過,那麼它就會根據id所對應的資源類型,分別調用XML解析器生成,或者通過讀取包中的圖片資源文件來創建Drawable。

而Resource.getDrawable把涉及到多個對象、多個邏輯的操作封裝成一個方法,就實現了一個調解者的角色。

代理模式

假設一個Activity A去綁定一個Service S,那麼A調用S中的每一個方法其實都是通過系統的Binder機制的中轉,然後調用S中的對應方法來做到的。Binder機制就起到了代理的作用。

適配器模式

對於android開發者來說起,適配器模式簡直太熟悉不過,有很多應用可以說是天天在直接或者間接的用到適配器模式,比如ListView。
ListView用於顯示列表數據,但是作為列表數據集合有很多形式,有Array,有Cursor,我們需要對應的適配器作為橋梁,處理相應的數據(並能形成ListView所需要的視圖)。
正是因為定義了這些適配器接口和適配器類,才能使我們的數據簡單靈活而又正確的顯示到了adapterview的實現類上。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved