23中設計模式詳解 單利模式

2021-07-25 12:39:27 字數 2526 閱讀 9405

單例模式:保證一類只有乙個例項,並且對外提供訪問該類例項的全域性訪問點

應用場景:

優點:單利只產生乙個例項,減少了系統效能的開銷,當乙個物件的產生需要較多資源的時候,就會利用單利來駐留

package com.spongeli.signleton;

/** * 單列模式--餓漢式

* 特點:執行緒安全,效率高,但是沒有懶載入的效果

* @author administrator

* */

public class signlitondemo01

/* 提供乙個私有靜態的全域性變數物件的例項 */

private static final signlitondemo01 instance = new signlitondemo01();

/* 對外提供訪問的方法 */

public static signlitondemo01 getinstance()

}

解釋:由於將構造器私有了,外界就無法直接訪問類的例項,需要通過對外提供的入口來訪問,返回的結果都是類的靜態的屬性,在初始化類的時候就會初始化該屬性,所以執行緒是天然安全的,所以沒有必要在入口處使用synchronzied關鍵字來鎖住方法,所以獲取的效率會非常高,但是不會達到懶載入的效果

package com.spongeli.signleton;

/** * 單列模式--懶漢式

* 特點:執行緒安全,獲取效率第,但是有懶載入的效果

* @author administrator

* */

public class signlitondemo02

/* 提供乙個私有靜態的全域性變數物件的例項 */

private static signlitondemo02 instance ;

/* 對外提供訪問的方法 */

public static synchronized signlitondemo02 getinstance()

return instance ;

}}

解釋:

由於沒有在載入類的時候就將靜態私有屬性例項化,需要在使用者第一次訪問的時候在例項化,就需要保證執行緒是安全的,所以在訪問的方法上,必須加上鎖,但是加上鎖之後,每次訪問都會檢測是否安全,影響了獲取的效率,但是實現了懶載入的效果。執行緒也是安全的

package com.spongeli.signleton;

/** * 雙重檢測鎖

* 特點:執行緒安全,獲取效率高,也懶載入的效果

* 但是:由於jvm內部原因,有可能出現不是單利的情況

* @author administrator

* */

public class signlitondemo03

/* 提供乙個私有靜態的全域性變數物件的例項 */

private volatile static signlitondemo03 instance ;

/* 對外提供訪問的方法 */

public static signlitondemo03 getinstance()

}} return instance ;

}}

解釋:雙重檢測鎖

是一種使用同步塊加鎖的方法。程式設計師稱其為雙重檢查鎖,因為會有兩次檢查 instance == null,一次是在同步塊外,一次是在同步塊內。為什麼在同步塊內還要再檢驗一次?因為可能會有多個執行緒一起進入同步塊外的 if,如果在同步塊內不進行二次檢驗的話就會生成多個例項了

package com.spongeli.signleton;

/** * 內部類的實現機制

* 特點:執行緒安全,獲取效率高,也有懶載入的效果

* 但是:由於jvm內部原因,有可能出現不是單利的情況

* @author administrator

* */

public class signlitondemo04

/* 建立乙個內部類來實現執行緒的安全,並且實現了懶載入 */

private static final class singlitondemoinstance

/* 提供對外訪問的入口 */

public static signlitondemo04 getinstance()

}

解釋:由於使用內部類來初始化物件,所以天然他是執行緒安全的,當第一次訪問時,內部類才會被載入,所以物件初始化,獲取到的都是同乙個物件

package com.spongeli.signleton;

/** * 內部類的實現機制

* 特點:執行緒安全,獲取效率高,也有懶載入的效果

* 但是:由於jvm內部原因,有可能出現不是單利的情況

* @author administrator

* */

public enum signlitondemo06

}

解釋:列舉天生就是單利,而且執行緒安全,但是沒有實現懶載入的效果

23設計模式之單利設計模式

單利設計模式設計的類有且只有乙個例項物件 單例設計模式只應在有真正的 單一例項 的需求時才可使用。私有化構造方法,有幾個構造方法就私有化幾個,保證其他地方不能例項化本類物件。本類中建立乙個本類的例項化物件。提供乙個能夠返回本類物件的方法。餓漢式 在建立類屬性時,建立乙個本類物件引用並直接new出物件...

設計模式 單利模式

單例模式的核心是保證乙個類只有乙個例項,並且提供乙個訪問例項的全域性訪問點。1 spring中bean物件的模式實現方式 2 servlet中每個servlet的例項 3 springmvc框架中,控制器物件是單例模式 4 專案中,讀取配置檔案的類,一般也只有乙個物件。沒有必要每次使用配置檔案資料,...

設計模式 單利

單利設計模式 解決乙個類在記憶體只存在乙個物件 步驟 1 建構函式私有化 2 類中建立本類物件 3 提供乙個方法可以獲取到該物件 1 餓漢式 class single private static single s new single public static single getinstanc...