23種設計模式之單例模式

2021-06-27 21:31:43 字數 1799 閱讀 4466

我們也經常遇到類似的情況,為了節約系統資源,有時需要確保系統中某個類只有唯一乙個例項,當這個唯一例項建立成功之後,我們無法再建立乙個同型別的其他物件,所有的操作都只能基於這個唯一例項。為了確保物件的唯一性,我們可以通過單例模式來實現,這就是單例模式的動機所在。

定義:單例模式(singleton pattern):確保某乙個類只有乙個例項,而且自行例項化並向整個系統提供這個例項,這個類稱為單例類,它提供全域性訪問的方法。單例模式是一種物件建立型模式。

那麼,怎麼建立乙個單例物件呢?

首先我們可以通過三個步驟來建立: 1、

由於每次使用

new關鍵字來例項化

乙個類時都將產生乙個新物件,為了確保

例項的唯一性,我們需要禁止類的外部直接使用

new來建立物件,因此需要將

該類的建構函式的可見性改為

private

,如下**所示:

/* 私有構造方法,防止被例項化 */ 

private singleton()

2、

將建構函式改為

private

修飾後該如何建立物件呢?不要著急,雖然類的外部無法再使用

new來建立物件,但是在

該類的內部還是可以建立的,因此,我們可以在

類中建立並儲存這個唯一例項。為了讓外界可以訪問這個唯一例項,需要在

singleton 

中定義乙個靜態的

singleton 

型別的私有成員變數,為了保證成員變數的封裝性,我們將

singleton 

型別的singleton

物件的可見性設定為

private,如下**所示:

private static singleton singleton = null;
3、

但外界該如何使用該成員變數並何時例項化該成員變數呢?答案是增加乙個公有的靜態方法,如下**所示:

/* 靜態工程方法,建立例項 */  

public static singleton getinstance()

}} return singleton;

}

getinstance()

方法中首先判斷

singleton

物件是否存在,如果不存在(即singleton

== null

),則使用

new關鍵字建立乙個新的

singleton

型別的singleton

物件,再返回新建立的

singleton

物件;否則直接返回已有的

singleton

物件。在類外我們無法直接建立新的

singleton

物件,但可以通過**

singleton.getinstance()

來訪問例項物件,第一次呼叫

getinstance()

方法時將建立唯一例項,再次呼叫時將返回第一次建立的例項,從而確保例項物件的唯一性。

單例模式有三個要點:一是某個類只能有乙個例項;二是它必須自行建立這個例項;三是它必須自行向整個系統提供這個例項。

那麼來看乙個完整的單例模式**:

public class singleton 

/* 靜態工程方法,建立例項 */

public static singleton getinstance()

}} return singleton;

}}

23種設計模式之 單例模式

保證乙個類僅有乙個例項,並提供乙個訪問它的全域性訪問點。讓類自身負責儲存它的唯一例項,這個類可以保證沒有其他例項可以被建立,並且它可以提供乙個訪問 獲取 該例項的方法。單例類應滿足以下特點 單例類 singleton 自己例項化自己的唯一例項,並提供訪問該唯一例項的方法。public class s...

23種設計模式之單例模式

單例模式 確保乙個類最多只有乙個例項,並提供乙個全域性訪問點 普通單例模式示例 有問題 public class singleton public static singleton getinstance return uniqueinstance 示例singleton public class ...

23種設計模式之單例模式

單例模式,屬於建立型別的一種常用的軟體設計模式。通過單例模式的方法建立的類在當前程序中只有乙個例項。單例模式是23種設計模式中比較簡單,也是比較重要的一種設計模式。在現在流行的框架中十分常見,比如 mybatis框架。新學期的第一天,小洪早早地來到教室上課,班主任是個美女呢!但是這個班主任很懶,每次...