日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

单例模式应用场景_【简易设计模式04】单例模式

發布時間:2024/9/19 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 单例模式应用场景_【简易设计模式04】单例模式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

總第56篇

在上篇中,我們對整個系統的設計應遵循的六大設計原則進行了系統性的梳理和講解。在開發過程中,我們應盡量按照這些設計原則去做,當然也不能生搬硬套,要適當權衡,根據自己的項目情況、項目場景去考量。從本篇開始,將通俗易懂地介紹23種設計模式。

本篇將詳細梳理單例模式。

1.單例模式的概念

單例模式(Singleton Pattern)是一個比較簡單的設計模式,它確保某一個類只有一個實例,并且自行實例化后向整個系統提供一個訪問它的全局方法。

單例模式的一般通用代碼如下:

public class Singleton {private static final Singleton singleton = new Singleton();private Singleton(){} //私有化構造函數//獲取實例對象public static Singleton getInstance(){return singleton;}//其他方法,盡量是static類型的public static void doSomething(){} }

在Java和C++中,單例模式的另一種通用的寫法如下:

public class Singleton {private static Singleton instance = null;private String name;private Singleton(String name) {this.name = name;}public static Singleton getInstance(String name) {if (instance == null) {instance = new Singleton(name);}return instance;} }

但是,這種通用寫法要考慮到線程同步問題。上面的代碼在系統高并發時,系統內還是可能存在多個實例,破壞了最初的預期,比如,線程1執行到singleton = new Singleton()而還沒有獲得對象時(對象初始化需要時間),線程2剛好執行到singleton == null,此時內存中就會出現兩個對象。因此,如果不想考慮線程同步問題,可以簡單地使用一般通用模式。

2.單例模式的優缺點及使用場景

單例模式的優點可以歸結為以下幾個方面:

  • 可以大大減少內存開銷。特別是對象需要頻繁創建、銷毀并且無法有效優化時,這種優勢更加明顯;
  • 可避免對資源的多重占用。比如一個寫文件動作,因為只有一個實例存在內存中,可有效避免對同一個資源文件同時寫操作;
  • 可方便設置系統全局訪問點。這種方式可以大大優化共享資源的訪問;

單例模式的缺點可以歸結為以下幾個方面:

  • 單例模式一般沒有接口,擴展比較困難。要擴展只能修改原有的代碼;
  • 單例模式不利于測試。在并行開發環境中,若單例模式沒有完成,是不能進行測試的;
  • 單例模式與單一職責原則有沖突。單例模式將“要不要單例”與業務邏輯融合在一個類中;

在一個系統中,若要求一個類有且僅有一個對象,則可以采用單例模式。具體的使用場景如下:

  • 要求生成唯一序列號的環境;
  • 在整個項目中需要一個共享訪問點或共享數據時;
  • 創建或銷毀一個對象消耗的資源過多時;
  • 需要定義大量的靜態常量和靜態方法時;

3.單例模式的擴展形式

若一個類可以產生多個對象,對象的數量不受限制,這是非常容易實現的,直接new出多個對象就可以了。而有時,對于某個類,我們需要兩三個或固定個數的對象實例,這時實現起來就略微有些復雜了。

這種產生固定數量對象的模式稱作有上限的多例模式,它是單例模式的一種擴展。對于這種模式,我們在設計時,在類中定義一個private變量,存儲實例的個數,并且在構造函數中將這些實例全部創建出來,方便系統后面使用。

單例模式是23個設計模式中比較簡單的模式,應用也非常廣泛,下圖示例了單例模式的概括圖。

本文到此結束!下篇繼續!

如果對你有幫助,請隨手 點贊 或 贊賞!關注本專欄,更多干貨與你分享。

=======================================================

歡迎【關注、私信 @武三郎】。我們一起交流一起進步。

總結

以上是生活随笔為你收集整理的单例模式应用场景_【简易设计模式04】单例模式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。