單例模式的一點小見解

2021-08-22 13:18:47 字數 1934 閱讀 6204

還是很心煩,一面試就問單例模式,單例模式的。那麼只能看看啥是單例模式

當這個類的物件在多個地方建立的時候,使得內部的方法多次呼叫,但是希望只要乙個物件操作這個方法,或者不希望多個地方同時呼叫這個方法,需要保持這個方法的單一性質,就用單利模式吧。

那麼單例模式怎麼實現的呢,關於這個網上有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.為了讓其他程式可以訪問到該類物件,只好在本類中,自定義乙個物...

個人對單例模式的一點理解

如有誤解請指出,感激不盡 單例模式是一種常用的軟體設計模式。在它的核心結構中只包含乙個被稱為單例的特殊類。通過單例模式可以保證系統中,應用該模式的乙個類只有乙個例項。即乙個類只有乙個物件例項。在某些場景下,我們可能只需要建立乙個例項,並且確保其他所有的物件訪問時都是這乙個例項,然後利用這個例項來控制...