1. 程式人生 > >設計模式之九 單例模式

設計模式之九 單例模式

大家好,幾天沒寫設計模式的博文了。如今讓我扯扯單例模式。

什麼是單例模式呢?顧名思義,就是一個例項。

那麼我們為什麼須要一個例項呢?或者說什麼情況下須要一個例項呢?

比方說:當我們對系統的註冊表進行管理的時候。我們就希望僅僅有一個註冊表物件。這時候就是用單例模式來做

先來看看定義:

單例模式:保證一個類僅有一個例項,並提供一個訪問它的全域性訪問點

那麼。how?

我們知道,建立一個類一定要有建構函式,那麼怎麼確保別人不會呼叫我的建構函式呢?僅僅要做成私有的就能夠。

這樣就僅僅能在我這個類中呼叫我的私有的建構函式

那麼。怎麼訪問呢?我們能夠提供一個靜態方法來獲得這個單例。


JAVA能夠有3中方式實現單例模式

法一.

package edu.fjnu.cs.hwb.singleton;
//空間換時間。一開始就例項化了。也叫做餓汗式載入
public class Singleton
{
	private static Singleton singleton = new Singleton();
	private Singleton(){}
	public static Singleton getInstance()
	{
		return singleton;
	}
}

法二.

package edu.fjnu.cs.hwb.singleton;
//懶漢式載入。當須要的時候在產生物件。

時間換空間。可是每次獲得例項都要進行同步(僅僅有當第一次建立這個物件的時候才須要同步)效率低. public class Singleton { private static Singleton singleton = null; private Singleton(){} public synchronized static Singleton getInstance() { if( singleton == null) singleton = new Singleton(); return singleton; } }


法三.

package edu.fjnu.cs.hwb.singleton;
//雙重檢查加鎖
public class Singleton
{
    //volatile修飾的變數。全部對該變數的讀寫都是直接操作共享記憶體,從而確保多個執行緒能正確的處理該變數。

    private volatile static Singleton singleton = null;     private Singleton(){}     public  static Singleton getInstance()     {         if( singleton == null)               synchronized (Singleton.class)             {                 if( singleton == null)                     singleton = new Singleton();             }         return singleton;     } }

基本上就是這樣了.