歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Java單例模式(Singleton)

Java單例模式(Singleton)

日期:2017/3/1 10:40:35   编辑:Linux編程

單例模式主要用於:有一些對象我們只需要一個,比如:線程池、緩存、對話框、處理偏好設置、注冊表對象、日志對象以及配置文件對象、數據庫連接對象等等。單例模式常用於管理共享資源,例如:數據庫連接或者線程池。

Java Singleton模式就為我們提供了這樣實現的可能。使用Singleton的好處還在於可以節省內存,因為它限制了實例的個數,有利Java垃圾回收(garbagecollection)。

這些對象只能有一個實例,如果制造出多個實例,就會導致很多問題如:程序異常、資源使用過量等。

單例模式很像靜態類,它自身有一個全局訪問點但是又沒有全局變量的缺點:如果將一個對象賦值給一個全局變量,那麼你必須在程序一開始的時候就得創建好對象,如果執行過程中沒有用到,就會非常耗費資源。

單例模式主要有三個部分:

1.私有構造方法:防止外部實例化,只有內部可以實例化

2.有一全局靜態方法:

(1).可以訪問私有的構造方法進行實例化。

(2).外部調用靜態方法,如果存在singleton實例就返回,如果不存在則創建一個實例.自己進行對實例進行管理.

3.靜態變量:利用一個靜態變量來記錄Singleton的唯一實例。

單例模式的UML非常簡單,但是真正用好單例模式,也是有點難度的

單例模式的源代碼如下:
  1. public class Singleton{
  2. //利用一個靜態變量來記錄Singleton類的唯一實例
  3. private static Singleton uiqueInstance;
  4. //把構造函數聲明為私有的,外部不可以實例化,只有內部可以實例化
  5. private Singleton(){
  6. }
  7. //外部通過調用靜態方法getInstance(),來獲得實例化對象
  8. public static Singleton getInstance(){
  9. //內部自己管理實例,始終保證只有一個實例
  10. if(uniqueInstance == null) {
  11. //如果沒有實例,則創建實例,在類的內部可以訪問構造函數,進而實例化
  12. uniqueInstance = new Singleton();
  13. }
  14. //如果已經存在就直接將實例返回就行了
  15. return uniqueInstance;
  16. }
  17. }
Copyright © Linux教程網 All Rights Reserved