C 設計模式 單例模式

2022-09-14 23:51:21 字數 2690 閱讀 8799

單例模式也就是保證乙個類只有乙個例項,並提供乙個全域性訪問點。單例設計模式解決問題:

1、在記憶體中只有乙個物件,節省記憶體空間;

2、避免頻繁的建立銷毀物件,可以提高效能;

3、避免對共享資源的多重占用,簡化訪問,為整個系統提供乙個全域性訪問點。

使用場景:單例模式只允許建立乙個物件,因此節省記憶體,加快物件訪問速度,因此以下幾種情況下適用單例設計模式: 

1.需要頻繁例項化然後銷毀的物件。

2.建立物件時耗時過多或者耗資源過多,但又經常用到的物件。

3.頻繁訪問資料庫或檔案的物件。

實現步驟:

(1)私有化建構函式,使其不能在類的外部通過new關鍵字隨意例項化該類物件。

(2)在該類內部定義乙個私有的靜態字段。【不會釋放,並且在第一次使用這個類時被初始化,而且只初始化一次】。

(3)對外提供乙個公開的靜態方法提供例項。

懶漢式實現單例

外部第一次呼叫createinstance方法,物件被建立。

private dbproxyhandler()//

private 避免外部建立

//volatile 可以保證執行過程中值不會被重複修改

private

static

volatile dbproxyhandler _singletondbproxyhandler = null

;

private

static

object slock = new

object

();

//////

/// ///

public

static

dbproxyhandler createinstance()

}return

_singletondbproxyhandler;

}//懶漢式 呼叫了方法才去構造

靜態建構函式:由clr保證,程式第一次使用這個型別前被呼叫,且只呼叫一次。
#region 餓漢式---使用靜態建構函式實現單例

//////建構函式耗時耗資源

/// private

dbproxyhandler()

//////

靜態建構函式:由clr保證,程式第一次使用這個型別前被呼叫,且只呼叫一次

//////

寫日誌功能的資料夾檢測

///xml配置檔案

/// static

dbproxyhandler()

private

static dbproxyhandler _singletonsecond = null

;

public

static

dbproxyhandler createinstance()

//餓漢式 只要使用類就會被構造

#endregion

如下測試**及結果如下:

注:從上面的測試可以看出,餓漢式

靜態建構函式

實現單例,在第一次使用dbproxyhandler類時,物件就已經被構造,呼叫dbproxyhandler.createinstance()方法時,

沒有二次建立物件,而是直接返回了物件

靜態字段:在第一次使用這個類之前,由clr保證,初始化且只初始化一次
#region 餓漢式使用靜態字段

private

dbproxyhandler()

//////

靜態字段:在第一次使用這個類之前,由clr保證,初始化且只初始化一次

/// private

static dbproxyhandler _dbproxyhandler = new dbproxyhandler();//

列印個日誌

public

static

dbproxyhandler createinstance()

//餓漢式 只要使用類就會被構造

#endregion

如下測試**及結果如下:

注:餓漢式靜態字段實現單例,在第一次使用dbproxyhandler類時,物件就已經被構造,呼叫dbproxyhandler.createinstance()方法時,

沒有二次建立物件,而是直接返回了物件。

總結:1、餓漢式 :第一時間建立例項,類載入就馬上建立

2、懶漢式 :需要才建立例項,延遲載入

3、單例模式會長期持有乙個物件,不會釋放 ,普通例項使用完後釋放

4、單例可以只構造一次,提公升效能(如果建構函式耗效能)

設計模式 C 設計模式 單例模式

設計模式 物件導向設計七大原則 設計模式 設計模式概念和分類 設計模式 c 設計模式 單例模式 設計模式 c 設計模式 工廠方法模式 設計模式 c 設計模式 抽象工廠模式 設計模式 c 設計模式 建造者模式 設計模式 c 設計模式 原型模式 作者自用的泛型單例模組 單例模式 singleton pa...

C 設計模式 (單例模式)

單例模式 顧名思義,只有乙個物件例項,即保證乙個類只有乙個物件可以使用。作用類似於乙個全域性變數,可以任意呼叫,但是比全域性變數更容易管理,使用。單例模式也有很多種實現方式 第一種實現方法 h檔案 class csock test public casyncsocket cpp檔案 csock te...

設計模式 單例模式(c )

在gof 設計模式 中,單例模式的定義為 保證乙個類僅有乙個例項,並提供乙個該例項的全域性訪問點。下面是單例模式的c 實現 方案一 建構函式和拷貝建構函式一定要宣告為private 定義static成員 單例指標和獲取單例指標的函式 static單例指標要在類外定義並初始化 實現獲取單例指標的函式時...