設計模式及在Android中的應用 單例模式

2021-08-01 08:59:19 字數 1847 閱讀 2442

確保某乙個類只有乙個例項,而且自行例項化並向整個系統提供這個例項。

這樣做有以下幾個優點

• 對於那些比較耗記憶體的類,只例項化一次可以大大提高效能,尤其是在移動開發中;

• 保持程式執行的時候該中始終只有乙個例項存在記憶體中

有如下經典的實現方式:

public

class

singleton

public

static singleton getinstance() }}

return instance;

}}

以上實現由如下幾個十分關鍵的地方:

• 必須要將建構函式私有化,以防止外部可以呼叫建構函式進行例項化;

• 定義乙個靜態函式獲取該例項;

• 定義乙個全域性的靜態變數,並以voliate修飾;

• 在例項獲取函式中,必須進行同步處理,並在同步塊中進行雙重判空;(雙重判空的原因:防止外部函式在呼叫該獲取例項的函式時,恰好有乙個執行緒被阻塞等待,等此次建立好例項之後,那個等待的執行緒獲取鎖之後就不需要再建立該例項,因此在同步鎖內進行二次判空是有必要的)。

回到android中,是有很多地方用到了單例模式的,下面舉例說明:

1).eventbus中獲取例項:

private

static

volatile eventbus defaultinstance;

public

static eventbus getdefault() }}

return defaultinstance;

}

該單例的實現就是標準的精簡單例模式的實現;

2). inputmethodmanager獲取例項

static inputmethodmanager sinstance;

public

static inputmethodmanager getinstance()

return sinstance;

}}

在輸入法服務例項的單例模式中,就是精簡的模式,即將外部判空去除了,直接進入同步塊中,當然同步塊中的判空是必不可少的;

在android中,諸如其他的系統服務如:accessibilitymanager在獲取例項的時候就是採用的單例模式進行的。

應用單例模式,我們可以在建立自定義工具類來管理我們的activity,**示例如下:

public

class activitymanager

public

static activitymanager getinstance()

}return instance;

}public

void

addacticity(activity act)

public

void

removeactivity(activity act)

public

void

killmyprocess()

mactivitystack.clear();

android.os.process.killprocess(android.os.process.mypid());

}}

這個activity的管理工具類就是乙個十分典型的應用。注意,該activity棧是歸屬於乙個例項的,因此各個方法對該資料結構進行操作時,均是針對該例項所屬的記憶體,因此所有的操作方法均為非靜態。

最後,安利乙個十分好用的android framework原始碼檢視網頁:

androidxref.com,當前已更新到完全免費,臨時查閱很管用。

MVP 模式在Android中的使用

什麼是mvp 作為碼農你應該知道mvc model view control 吧,如果不知道,請自行補腦。mvp model view presenter 是mvc衍生而來的,mvp並不是乙個新玩意,很早以前就由某軟公司提出,近年來在android應用開發中越來越多的被提及,越來越重要了。本文簡單解...

尋找android中的設計模式(三)

尋找android中的設計模式 三 尋找工廠模式 工廠模式的家族分四種 靜態工廠模式 簡單工廠模式 工廠方法模式 抽象工廠模式。下面以開冒菜店為例,假設我定義了一家冒菜店 public class maocaistore else if type.equals zhongla else if typ...

Android中的設計模式 介面卡模式

從名字上就可以看出介面卡是為了針對介面不匹配的情況,而做出的相容方法,假設我們有乙個已經存在的類adaptee,其中有一些已經存在並實現好的方法methoda。但是客戶不希望呼叫這個類,而是希望呼叫乙個特定的介面例如target介面。於是如果想要呼叫adaptee.methoda 方法,建立乙個ad...