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

首頁 > 學院 > 開發設計 > 正文

設計模式之單例模式(Singleton)

2019-11-14 09:33:58
字體:
來源:轉載
供稿:網友

From:http://mp.weixin.QQ.com/s/RUUBn_VBmkPE8oE20IBleg 單例模式(Singleton Pattern):

1.定義: 確保某一個類只有一個實例,而且自動實例化并向整個系統提供這個實例

2.優點: 1、在內存中只有一個實例,所以減少了內存開銷,特別是在一個對象需要頻繁地創建、銷毀時,而且創建或銷毀時性能又無法優化。單例模式的優勢非常明顯; 2、避免對資源的多重占用。例如寫文件動作,由于只有個實例存在內存中,避免對同一個資源文件的同時寫操作 3、提供了對唯一實例的受控訪問。 4、允許可變數目的實例。

3.缺點: 1、沒有接口,擴展困難。 2、不適用于變化的對象,如果同一類型的對象總是要在不同的用例場景發生變化,單例就會引起數據的錯誤,不能保存彼此的狀態。 3、濫用單例將帶來一些負面問題,如為了節省資源將數據庫連接池對象設計為的單例類,可能會導致共享連接池對象的程序過多而出現連接池溢出;如果實例化的對象長時間不被利用,系統會認為是垃圾而被回收,這將導致對象狀態的丟失。 4、單例類的職責過重,在一定程度上違背了“單一職責原則”。

4.適用場景: 1、資源共享的情況下,避免由于資源操作時導致的性能或損耗等。如上述中的日志文件,應用配置。 2、控制資源的情況下,方便資源之間的互相通信。如線程池等。 3、需要定義大量的靜態常量和靜態方法(如工具類)的環境,可以采用單例模式

5.UML圖 這里寫圖片描述

6.單例模式的幾種書寫方式:

1/ 餓漢式單例:單例實例在類裝載時就構建 特點:線程安全 在類加載的同時已經創建好一個靜態對象,調用時反應速度快

public class SingleTonPattern(){ PRivate static SingletonPattern singleton=new SingletonPattern(); private SingletonPattern(){} //通過該方法獲取實例 public static SingletonPattern GetSingleton() { return singleton; }}

2/ 懶漢式單例:單例實例在第一次被使用時構建,延遲初始化 特點: 避免了餓漢式的那種在沒有用到的情況下創建事例,資源利用率高,不執行getInstance()就不會被實例,可以執行該類的其他靜態方法。但是多個線程判斷instance都為null時,在執行new操作時多線程會出現重復情況

public class SingletonPattern(){ private static SingletonPattern singleton=null; private SingletonPattern(){} //通過該方法獲得實例對象 public static SingletonPattern GetSingleton() { if(singleton==null) { //多個線程判斷instance都為null時,在執行new操作時多線程會出現重復情況 singleton=new SingletonPattern(); } return singleton; }}

3/ 雙重檢測單例: 特點: 資源利用率高,不執行getInstance()就不被實例,可以執行該類其他靜態方法 但是第一次加載時反應不快

public class SingletonPattern(){ private static SingletonPattern singleton=null; private SingletonPattern(){} //通過該方法獲得實例對象 public static SingletonPattern GetSingleton() { if(singleton==null) { //使用synchronized關鍵字,防止多個線程判斷instance都為null時,在執行new操作時多線程會出現重復情況 synchronized(SingletonPattern.class) { if(instance==null) { instance=new SingletonPattern(); } } } return singleton; }}

4/ 靜態內部類模式:

public class SingletonPattern(){ private SingletonPattern(){} //通過該方法獲得實例對象 public static class SingletonHelp() { static SingletonPattern singleton=new SingletonPattern(); } //通過該方法獲得實例對象 public static SingletonPattern GetSingleton() { return singleton; }}
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 巴南区| 察隅县| 成武县| 南丰县| 怀仁县| 边坝县| 包头市| 平阴县| 二手房| 南康市| 西乌| 和龙市| 武安市| 谢通门县| 五原县| 石楼县| 安泽县| 新疆| 桐乡市| 荔波县| 九龙城区| 林周县| 澄江县| 临清市| 龙泉市| 花莲市| 炎陵县| 锦州市| 新乡市| 仁寿县| 宜君县| 晋宁县| 台山市| 永兴县| 南康市| 庄浪县| 宜都市| 崇礼县| 安宁市| 黎平县| 大洼县|