C 單例設計模式學習記錄

2021-10-05 22:06:18 字數 1785 閱讀 6030

單例模式:把物件的建立許可權關閉,提供乙個公開的靜態方法,起到物件重用

意義:保證乙個類僅有乙個例項,並提供乙個訪問它的全域性訪問點

適用於:

資料臨時儲存的地方靜態字典/資料庫連線池/執行緒池/ioc的容器例項/配置檔案資訊儲存

單例模式:保證程序當中,某個類只有乙個例項

問題是怎樣保證?怎麼樣強制保證呢?

單例就是為了只有乙個例項,比如資料臨時儲存的地方靜態字典/資料庫連線池/執行緒池/ioc的容器例項/配置檔案資訊儲存。 而不是用來解決執行緒衝突的。

單例模式和普通例項的區別:

單例模式會長期持有乙個物件,不會釋放。而普通例項在使用完後就會進行釋放。

單例模式只會進行一次構造,如果你的建構函式非常消耗效能,那麼你使用單例就會提公升你的效能。

個人推薦大家先去學習一下設計模式六大原則,因為所有的設計模式歸根到底都是根據六大原則進行的具體化。

懶漢式單例模式實現:

/// /// 懶漢式單例模式

///

public class singleton////泛型型別裡面的靜態字段,是隨著不同的型別引數唯一的 泛型單例不可能的

thread.sleep(1000);

console.writeline("被構造一次", this.gettype().name);

}/// /// 3 全域性唯一靜態 重用這個變數

///

private static volatile singleton _singleton = null;//volatile 促進執行緒安全 讓執行緒按順序操作

private static object singleton_lock = new object();

/// /// 2 公開的靜態方法提供物件例項

///

///

public static singleton createinstance()}}

return _singleton;

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

//既然是單例,大家用的是同乙個物件,用的是同乙個方法,那還會併發嗎 還有執行緒安全問題嗎?

//當然有,,單例不能解決執行緒衝突的 解決:加鎖

public int itotal = 0;

public void show()

public static void test()

}

餓漢式單例模式實現:

/// /// 餓漢式:特點就是 只要使用了類就會被構造

///

public class singletonsecond //泛型型別裡面的靜態字段,是隨著不同的型別引數唯一的,所以泛型單例是不可能也沒用實際意義的

/// /// 全域性唯一靜態 , 單例

///

private static volatile singletonsecond _singletonsecond = null; //volatile 促進執行緒安全,讓執行緒按順序操作

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

///

/// 寫日誌功能的資料夾檢測

/// xml配置檔案

///

static singletonsecond()

/// /// 外部建立例項的唯一途徑

///

/// 例項

public static singletonsecond createinstance()

}

設計模式學習記錄 4 單例模式

單例模式要求實現的目標 保持乙個類有且僅有乙個例項,單例模式一般會採用延遲載入的模式 public class singlethreadedsingleton public static singlethreadsingleton getinstance return instance public...

設計模式之單例模式學習記錄

單例模式實現的方式 1 惡漢式 類載入到記憶體後,就例項化乙個例項,jvm保障線程安全 簡單實用,推薦 缺點 不管用到與否類裝載時就完成例項化 2 懶漢式 雖然達到了初始化的目的,但是執行緒不安全 解決方式 通過synchronized修飾,但是效率會下降 通過synchronized修飾減少同步 ...

設計模式學習記錄(一)單例模式

package designpatterns.singletonmode 單例模式 餓漢式 建立物件例項時直接初始化 用空間換時間 author fengx date 2020 12 27 public class hungrysingletonmode 2 建立該型別的私有靜態例項 private...