JAVA設(shè)計模式之單例模式
1. 模式介紹
模式的定義
確保某一個類只有一個實例,而且自行實例化并向整個系統(tǒng)提供這個實例。
模式的使用場景
確保某個類有且只有一個對象的場景,例如創(chuàng)建一個對象需要消耗的資源過多,如要訪問 IO 和數(shù)據(jù)庫等資源。
2. UML類圖
角色介紹:
。1)Client : 高層客戶端。
。2)Singleton : 單例類。
3. 模式的簡單實現(xiàn)
public class Singleton { private static Singleton intance; private Singleton() {} public static Singleton getInstance() { /* * 一開始多線程進(jìn)來,遇到鎖,一個線程進(jìn)去,是為空,new對象; 后續(xù)線程進(jìn)入,不為空,不操作;最后直接返回 * 對象不為空,再有多個線程進(jìn)入該函數(shù),不為空,不執(zhí)行加鎖操作,直接返回 */ if (intance == null) { synchronized (Singleton.class) { if (intance == null) { intance = new Singleton(); } } } return intance; } } class Singleton1 {/pic/pic/pic/pic/pic/pic/pic/pic/pic/p>
4.優(yōu)點與缺點
。1)優(yōu)點:
A.由于單例模式在內(nèi)存中只有一個實例,減少了內(nèi)存開支,特別是一個對象需要頻繁地創(chuàng)建、銷毀時,而且創(chuàng)建或銷毀時性能又無法優(yōu)化,單例模式的優(yōu)勢就非常明顯。
B.由于單例模式只生成一個實例,所以減少了系統(tǒng)的性能開銷,當(dāng)一個對象的產(chǎn)生需要比較多的資源時,如讀取配置、產(chǎn)生其他依賴對象時,則可以通過在應(yīng)用啟動時直接產(chǎn)生一個單例對象,然后用永久駐留內(nèi)存的方式來解決;
C.單例模式可以避免對資源的多重占用,例如一個寫文件動作,由于只有一個實例存在內(nèi)存中,避免對同一個資源文件的同時寫操作。
D.單例模式可以在系統(tǒng)設(shè)置全局的訪問點,優(yōu)化和共享資源訪問,例如可以設(shè)計一個單例類,負(fù)責(zé)所有數(shù)據(jù)表的映射處理。
(2)缺點
A.單例模式一般沒有接口,擴(kuò)展很困難,若要擴(kuò)展,除了修改代碼基本上沒有第二種途徑可以實現(xiàn)。
【JAVA設(shè)計模式之單例模式】相關(guān)文章:
Java單例設(shè)計模式12-21
JAVA多線程并發(fā)下的單例模式應(yīng)用02-22
java設(shè)計模式:工廠模式10-04
java設(shè)計模式:裝飾模式11-13
java設(shè)計模式:DAO模式03-13
java設(shè)計模式:多例模式01-30
解析Java的設(shè)計模式編程之解釋器模式的運(yùn)用01-21
Java的設(shè)計模式編程中責(zé)任鏈模式的運(yùn)用的實例講解03-13
Java的結(jié)構(gòu)型模式06-21