單例模式:把物件的建立許可權關閉,提供乙個公開的靜態方法,起到物件重用
意義:保證乙個類僅有乙個例項,並提供乙個訪問它的全域性訪問點
適用於:
資料臨時儲存的地方靜態字典/資料庫連線池/執行緒池/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...