国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

單例模式(Singleton-Pattern)

2019-11-06 06:25:28
字體:
供稿:網(wǎng)友

單例模式(Singleton-Pattern)

1. 定義

Ensure a class has only one instance, and PRovide a global point of access to inspect.

確保某一個類只有一個實例,而且自行實例化并向整個系統(tǒng)提供這個實例。

2. 代碼

餓漢模式,推薦使用
public class Singleton { private static final Singleton singleton = new Singleton(); // 限制生產(chǎn)多個對象 private Singleton() { // TODO } // 通過該方法獲得實例對象 public static Singleton getSingleton() { return singleton; } // 類中其他方法,盡量使static public static void doSomething() { // TODO }}
懶漢模式,必須使用synchronized
public class Singleton { private static Singleton singleton = null; // 限制生產(chǎn)多個對象 private Singleton() { } // 通過該方法獲得實例對象 public static ,必須使用synchronized getSingleton() { if (singleton == null) { singleton = new Singleton(); } return singleton; } // 類中其他方法,盡量使static public static void doSomething() { // TODO }}

3. 優(yōu)缺點

優(yōu)點

由于單例模式在內(nèi)存中只有一個實例,減少了內(nèi)存開支,特別是一個對象需要頻繁地創(chuàng)建、銷毀時,而且創(chuàng)建或銷毀時性能有無法優(yōu)化,單例模式的優(yōu)勢就非常明顯。

由于單例模式只生成一個實例,所以減少了系統(tǒng)的性能開銷,當(dāng)一個對象的產(chǎn)生需要較多的資源時,如讀取配置,產(chǎn)生其他依賴對象時,則可以通過在應(yīng)用啟動時直接產(chǎn)生一個單例對象,然后永久駐留內(nèi)存的方式來解決(javaEE需要注意JVM垃圾回收機制)

單例模式可以避免對資源的多重占用,例如一個寫文件動作,由于只有一個實例存在內(nèi)存中,避免對同一個資源文件的同時寫操作。

單例模式可以在系統(tǒng)設(shè)置全局變量的訪問點,優(yōu)化和共享資源訪問,例如可以設(shè)計一個單例類,負責(zé)所有數(shù)據(jù)表的映射處理。

缺點

擴展困難。

對測試時不理的。

單例模式與單一職責(zé)原則有沖突。

4. 使用場景

生成唯一序列號。

共享數(shù)據(jù)。

創(chuàng)建一個對象需要消耗的資源過多,如IO或數(shù)據(jù)庫訪問等資源。

需要大量靜態(tài)常量和靜態(tài)方法的環(huán)境。

5. 總結(jié)

在spring中,Bean默認就是單實例,如果單例模式擴展一下變?yōu)橛泄潭ㄉ舷薜膶嵗J剑涂梢猿蔀槎嗬J剑鐢?shù)據(jù)庫連接池(?)。總之,單例模式是一種比較常見的設(shè)計模式,可能在沒有學(xué)習(xí)過單例模式之前就已經(jīng)運用了這種模式,或使用過,但未曾總結(jié)整理。


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 大荔县| 若羌县| 安泽县| 五常市| 安化县| 林甸县| 开远市| 大厂| 南平市| 盈江县| 沾化县| 南川市| 秭归县| 兴山县| 延长县| 改则县| 林甸县| 嵩明县| 阿巴嘎旗| 克拉玛依市| 布拖县| 南岸区| 龙陵县| 体育| 广东省| 沙河市| 逊克县| 咸宁市| 乐安县| 镇原县| 景泰县| 吉木乃县| 阿拉善盟| 丘北县| 徐州市| 沂水县| 通城县| 新晃| 长沙县| 南召县| 南召县|