Android:Android涉及到的設計模式

來源:互聯網
上載者:User

標籤:

組合模式

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中有很多系統層級的全域變數,如時間,IME,賬戶,狀態列等等,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的實作類別上。

Android:Android涉及到的設計模式

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.