1.1概述 保證一個類僅有一個實例,並提供一個訪問它的全局訪問點。這就是單件模式的定義。 在某些情況下,我們可能需要某個類只能創建一個對象,即不讓用戶用該類實例化出多於兩個的實例。 例如,在一個公文管理系統中,公文類的實例“公文文件”,需要將公章類的實例作為自己的一個成員,以表明自己是一個有效的公文 ...
1.1概述
保證一個類僅有一個實例,並提供一個訪問它的全局訪問點。這就是單件模式的定義。
在某些情況下,我們可能需要某個類只能創建一個對象,即不讓用戶用該類實例化出多於兩個的實例。
例如,在一個公文管理系統中,公文類的實例“公文文件”,需要將公章類的實例作為自己的一個成員,以表明自己是一個有效的公文文件,那麼系統的設計者就需要保證公章類只有一個實例,不能允許用戶使用公章類的構造方法再創建出第2個實例。
單件模式是關於怎樣設計一個類,並使該類只有一個實例的成熟模式,該模式的關鍵是將類的構造方法設置為private許可權,並提供一個返回它的唯一實例的類方法(static)。
1.2模式的結構
單件模式的結構非常簡單,只有一種角色:
(1)單件類(Singleton):單件類只可以創建出一個實例。
單件模式結構類圖如下所示:
單件類的設計有如下特點:
(1)單件類中包含有自身聲明的類變數,這個類變數就是單件類唯一的實例。
(2)單件類的構造方法訪問許可權是private。為了確保單件類中自身聲明的類變數是單件類唯一的實例,單件類必須將構造方法的訪問許可權設置為private。這樣一來其他類都無法使用單件類創建的對象。
(3)單件類負責創建自己唯一的實例,並提供訪問該實例的類方法。由於單件類的構造方法被設置為private,所以單件類必須自己負責創建自身聲明的實例。為了讓用戶使用單件類這個唯一實例,單件類必須提供一個類方法,以便其他用戶使用單件類的類名就可以調用這個類方法訪問使用單件類這個唯一實例。
1.3單件模式的優點
(1)單件類的唯一實例由單件類本身控制,所以可以很好地控制用戶何時訪問它。
1.4適合使用單件模式的情景
(1)當系統需要某個類只能有一個實例