麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

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

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

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

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; }}
上一篇:C#知識整理筆記

下一篇:c++程序的運行

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 国产亚洲综合精品 | 亚洲日本韩国在线观看 | 精品一区二区三区在线观看国产 | 欧美性色大片 | 久久露脸国语精品国产91 | 国产99久久久久久免费看农村 | 91国内精品久久久久免费影院 | 成人在线视频国产 | 欧美日本日韩 | 久久艹精品 | 久色网站 | 国产精品视频一区二区三区综合 | 青青草在线免费观看 | 亚洲人成网站免费播放 | 一级成人欧美一区在线观看 | 成人午夜激情网 | 久久草在线视频免费 | 粉嫩av一区二区三区四区在线观看 | 国产一级在线看 | 做羞羞视频| 青青国产在线视频 | 欧美一级视屏 | 成人午夜免费网站 | 国产一区二区三区四区五区在线 | mmmwww| 日韩在线毛片 | 成人一级在线 | 毛片免费看电影 | 蜜桃视频在线观看视频 | 99精品国产一区二区三区 | 最新一区二区三区 | 久久亚洲精选 | 爽爽淫人综合网网站 | 欧美.com| 日韩视频一区二区三区四区 | 爽成人777777婷婷 | 色偷偷欧美 | 免费观看一区 | www.99热视频| 成人在线网站 | 久久欧美亚洲另类专区91大神 |