設計模式學習筆記之單例模式

2022-05-06 04:42:09 字數 2175 閱讀 2983

什麼是單例模式? 

顧名思義,就是只有乙個例項,也就是說乙個應用程式中只有乙個例項物件.

既然乙個系統,乙個應用程式中只有乙個例項,那麼也就說明了如果操作這乙個物件,必然涉及到共享資源,涉及到資源分配問題,資源競爭等問題. 

那麼我們的應用場景是什麼呢?

2. 池化技術. 比如資料庫的連線池. 每個資料庫的可支援的連線數量是有限,而且連線物件建立和銷毀也是比較耗記憶體的. 通過乙個統一的入口去控制,可以保證對資料庫的壓力在可控的範圍內,同是也可以保證出具庫連線的持續使用.

3. 配置中心. 乙個應用程式針對通過乙個配置檔案的載入只需要載入一次即可,不需要多次載入.

其實以上只是一些常見的應用場景,當然單例模式的應用場景也遠不止於此.

本文參考的部落格位址為:

接下來我們來看一下常見的實現方式,以及其中的對比.

餓漢式,即直接初始化好,使用的時候直接呼叫即可.

package com.cbl.design.singletondesign;

public class hungrysingleton

//向外提供獲取示例的靜態方法

public static hungrysingleton getinstance()

}

懶漢式, 顧名思義,就是懶,需要的時候再去初始化

package com.cbl.design.singletondesign;

public class lazysingleton

public static lazysingleton getsingleton() }}

return singleton;

}}

靜態內部類的方式

package com.cbl.design.singletondesign;

public class staticinnersingleton

private staticinnersingleton()

public static staticinnersingleton getsingleton()

private string name;

public void desc()

}

還有一種實現方式是依賴於列舉, 我們知道列舉中的物件是例項化好的,而且列舉天生要求列舉類的構造器必須私有,而且本身還是被final 修飾的, 不可被繼承

package com.cbl.design.singletondesign;

public enum enumsingleton

public static void process()

private string name;

private integer age;

public string getname()

public void setname(string name)

public integer getage()

public void setage(integer age)

}

以上是4中常見的構造單例模式的四種執行緒安全的構造單例的設計模式.網上可能還有其餘的非執行緒安全的構建單例的方法, 但是執行緒安全的主要就是這四種.

(1) : 餓漢式 :  載入類的時候就會進行例項化,,如果後續沒有用到,則會搞成資源浪費.

(2) : 懶漢式 : 使用的時候再去初始化,這樣在前幾次呼叫併發呼叫的時候,會出現資源競爭, 等待時間較久,但是後續再次呼叫的時候, 由於是雙重判斷加加鎖校驗機制, 不會出現阻塞.

(3): 靜態內部類 : 也是在使用的時候再去載入內部類並初始化外部類的物件,第一次呼叫會比較慢.

(4):列舉單例:  類載入的時候就穿建立好物件了, 特點和餓漢式很像.

上面是這幾種單例方式的特點,其中懶漢式,餓漢式,靜態內部類的方式都不能防止反射,只有列舉類可以防止反射.

但是一般我們的應用程式只需要保證可以正常實現單例即可,沒必要過多的去防止單例模式,我們使用單例模式,就是想構造單例物件的,但是我們自己又去使用反射去破壞單例模式,這不是自己給自己找麻煩嗎.

設計模式之單例模式,學習筆記

所謂的單例模式就是說乙個物件,我們只去例項化一次,在頁面中如果有乙個物件是唯一的,那麼就可以用單例模式。var fn function name fn.prototype.getname function fn.getinstrace function var a fn.getinstrace js...

設計模式之單例學習筆記

使用場景 當使用乙個類會消耗很大的系統資源時,沒有必要去建立多個物件,這時候我們就應該使用單例模式。而為了使建立的物件有且只有乙個,類的構造方法應該是私有的,且獲取例項的方法應該是執行緒安全的。單例的幾種實現方式 1.餓漢模式 public class test public static test...

設計模式筆記之 單例模式

那麼單例的建立方式有4中 其實是5種,只不過有一種因為不推薦使用,就不學習了 這種寫法分類來自尚學堂的老師。這個寫法是類在初始化就已經完成單例的建立的,不可以延遲操作 package singlepattern 這是類初始化就馬上載入,惡漢 author cloudhuan public class...