還是很心煩,一面試就問單例模式,單例模式的。那麼只能看看啥是單例模式
當這個類的物件在多個地方建立的時候,使得內部的方法多次呼叫,但是希望只要乙個物件操作這個方法,或者不希望多個地方同時呼叫這個方法,需要保持這個方法的單一性質,就用單利模式吧。
那麼單例模式怎麼實現的呢,關於這個網上有2種,3種,5種,7種 好多個說法。其實我想說,這麼多種實現方式,都能記住嗎,即使記住了,能用得到嗎?我看到的 想到的也就是兩種
餓漢式:
//餓漢式
public class singin
public static singin getinstance()
}
懶漢式1:
//懶漢式
public class singlein2
public static synchronized singlein2 getinstance()
return instance;
}}
懶漢式公升級一下:懶漢式2:
public class singleton3
public static singleton3 getinstance()}}
return instance;
}}
其中我把懶漢式1也加了鎖,不過懶漢式2鎖更加好,比較少的占用鎖資源
網上說,在原始碼設計中有好多的都使用了單例模式,我找了很多的網頁,很多人寫的部落格,一共就說了3個單例模式:
imageloader,eventbus和layoutinflater
先說imageloader吧,這個最簡單也最火:
public static imageloader getinstance() }}
return instance;
}
這個就是第三種方式進行的。所以很多人推崇
layoutinflater:
/**
* obtains the layoutinflater from the given context.
*/public static layoutinflater from(context context)
return layoutinflater;
}
往下走:contextimpt的getsystemservice
@override
public object getsystemservice(string name)
往下走:
/**
* gets a system service from a given context.
*/public static object getsystemservice(contextimpl ctx, string name)
這裡相當於
這裡的
private static final hashmap> system_service_fetchers =
new hashmap>();
這裡的getservice是:
static abstract inte***ce servicefetcher
具體到cachedservicefetcher:
@override
@suppresswarnings("unchecked")
public final t getservice(contextimpl ctx) catch (servicenotfoundexception e)
}return (t)service;
}}
這東西就是很簡單了 最後就是乙個懶漢式樣式的。 this的一點見解
執行環境 execution context,有時也成為上下文,有時也稱為 環境 執行環境定義了變數和函式有權訪問那些資料,決定各自的行為。全域性執行環境是最外圍的執行環境。全域性執行環境一直都存在。宿主環境不同執行環境也不同。每乙個環境都有乙個執行環境。當執行流進入乙個函式時,函式的環境就會被推入...
關於單例設計的一點小領悟
今天學習了很多其中單例設計 有一點沒理解 後面問了同學才明白了 下面再說我遇到的那個傻瓜般的問題 單例設計 意思就是配置檔案 只需要乙個配置檔案就可以了 想要保證唯一性?1.為了避免其他程式過多建立該類物件,先禁止其他程式建立該類物件 2.為了讓其他程式可以訪問到該類物件,只好在本類中,自定義乙個物...
個人對單例模式的一點理解
如有誤解請指出,感激不盡 單例模式是一種常用的軟體設計模式。在它的核心結構中只包含乙個被稱為單例的特殊類。通過單例模式可以保證系統中,應用該模式的乙個類只有乙個例項。即乙個類只有乙個物件例項。在某些場景下,我們可能只需要建立乙個例項,並且確保其他所有的物件訪問時都是這乙個例項,然後利用這個例項來控制...