單例模式特色:android
一、一個類只能有一個實例安全
二、本身建立這個實例code
三、整個系統都要使用這個實例對象
單例模式的形式:get
一、餓漢式單例類it
public
class
Singleton {
io
private
Singleton(){}
class
//在本身內部定義本身一個實例,是否是很奇怪?
效率
//注意這是private 只供內部調用
方法
private
static
Singleton instance =
new
Singleton();
//這裏提供了一個供外部訪問本class的靜態方法,能夠直接訪問
public
static
Singleton getInstance() {
return
instance;
}
}
二、懶漢式單例類
private
static
Singleton instance = null;
public
static
synchronized Singleton getInstance() {
//這個方法比上面有所改進,不用每次都進行生成對象,只是第一次
//使用時生成實例,提升了效率!
if
(instance==null)
instance=
new
Singleton();
return
instance; }
}
第二中形式是lazy initialization,也就是說第一次調用時初始Singleton,之後就不用再生成了。
注意到lazy initialization形式中的synchronized,這個synchronized很重要,若是沒有synchronized,那麼使用getInstance()是有可能獲得多個Singleton實例。
通常來講第一種比較安全
三、比較常使用的是:
public
class
Singleton {
private
volatile
static
Singleton singleton;
private
Singleton(){}
public
static
Singleton getInstance(){
if
(singleton==null){
synchronized(Singleton.
class
){
if
(singleton==null){
singleton=
new
Singleton();
}
}
還能夠參考一下android的Activity加載模式:
一、singleTop
二、singleTask
三、singleInstance