CY的摸魚——單例模式
單例模式(Singletion Pattern)是Java中最簡單的設(shè)計(jì)模式之一。在枚舉的內(nèi)容中,我們可以讓一個類產(chǎn)生固定個數(shù)的對象,如果進(jìn)一步限制,一個類只允許產(chǎn)生唯一的一個對象,就實(shí)現(xiàn)了單例模式。
單例模式的目的在于避免頻繁創(chuàng)建和消毀實(shí)例,減少內(nèi)存消耗。
使用場景:
要求生產(chǎn)唯一的序列號。
計(jì)數(shù)器,不用沒錯刷新都在數(shù)據(jù)庫中加一,用單例對象先緩存。
連接數(shù)據(jù)庫對象。
實(shí)現(xiàn)步驟:
定義一個屬性,保存當(dāng)前類的靜態(tài)對象(單例對象);
將構(gòu)造方法私有;
創(chuàng)建一個靜態(tài)get()方法返回這個單例對象;
模式可以分為:懶人模式,餓人模式
懶人模式:
創(chuàng)建實(shí)例的過程是在get()方法中,當(dāng)需要單例對象時,調(diào)用get()方法才實(shí)例化。
優(yōu)點(diǎn):使用時候才創(chuàng)建實(shí)例,避免內(nèi)存浪費(fèi);
缺點(diǎn):線程不安全,無法保證絕對的單例。
PS:可以加線程鎖解決,但是會降低執(zhí)行效率。
餓人模式:
直接在屬性中實(shí)例化,類加載的時候單例對象就準(zhǔn)備好了。
優(yōu)點(diǎn):線程安全,執(zhí)行效率高;
缺點(diǎn):不需要的時候也會創(chuàng)建實(shí)例,內(nèi)存浪費(fèi)。
PS:枚舉也可以實(shí)現(xiàn)單例模式,本質(zhì)上就是餓人模式。
