歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Java單例模式(Singleton)

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

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

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

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

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

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

2.有一全局靜態方法:

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

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

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

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

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