23種設計模式之單例模式

2021-10-03 23:17:44 字數 1869 閱讀 7399

單例模式,屬於建立型別的一種常用的軟體設計模式。通過單例模式的方法建立的類在當前程序中只有乙個例項。單例模式是23種設計模式中比較簡單,也是比較重要的一種設計模式。在現在流行的框架中十分常見,比如:mybatis框架。

新學期的第一天,小洪早早地來到教室上課,班主任是個美女呢!但是這個班主任很懶,每次都不想自己點名,一上課就叫乙個同學幫她點名,第二次就叫另乙個同學起來點名…同學們都覺得浪費時間,於是想選舉出乙個紀律委員,在老師考勤的時候告訴班主任考勤情況。小洪乙個機靈,自願競選成為了紀律委員,與漂亮的班主任有了進一步關係…

也許上面這個例子不是特別貼切單例模式,但他們思想都是一樣的,這個故事同學們是為了避免時間的浪費,而單例模式就是為了避免資源的浪費。

大家可以把這個班級想象成為乙個類,把班主任想象成需要呼叫到這個類的客戶端,而紀律委員就是使用了單例模式之後被例項化的物件。接下來不管是班主任。還是其他老師來需要考勤(呼叫這個班的方法),就只需要訪問小洪就可以了(單例的乙個物件)。

/**

* @author 千里皓月 on 2020/1/16

* 餓漢式單例

* 執行緒安全,但是容易造成資源浪費

* 不能延時載入

*/public

class

demo1

/** * 2.類初始化就載入該物件

*/private

static demo1 install =

newdemo1()

;//3.提供獲取該物件的方法,不考慮併發,效率高

public

static demo1 getinstall()

}

/**

* @author 千里皓月 on 2020/1/16

* 懶漢式單例

* 效率不高,可延時載入

*/public

class

demo2

private

static demo2 instance;

/** 效率低,但是執行緒安全

*/public

static

synchronized demo2 getinstance()

return instance;

}}

/**

* @author 千里皓月 on 2020/1/16

* dcl懶漢式

* 雙重檢查鎖

*/public

class

demo3

private

static demo3 instance;

public

static demo3 getinstance()

}return instance;

}}

在例項化物件的時候先判斷類中是否存在,如果物件已經存在,則直接返回,若物件不存在則例項化乙個物件。同時,使用synchronized關鍵字使其執行緒安全

public

class

demo4

private

static

class

innerclass

//在內部類中宣告變數,並在get方法中返回內部類中的屬性

public

static demo4 getinstance()

}

使用靜態內部類,在靜態內部類中例項化物件,可以保證執行緒安全和高效

public

enum demo5

}

23種設計模式之單例模式

我們也經常遇到類似的情況,為了節約系統資源,有時需要確保系統中某個類只有唯一乙個例項,當這個唯一例項建立成功之後,我們無法再建立乙個同型別的其他物件,所有的操作都只能基於這個唯一例項。為了確保物件的唯一性,我們可以通過單例模式來實現,這就是單例模式的動機所在。定義 單例模式 singleton pa...

23種設計模式之 單例模式

保證乙個類僅有乙個例項,並提供乙個訪問它的全域性訪問點。讓類自身負責儲存它的唯一例項,這個類可以保證沒有其他例項可以被建立,並且它可以提供乙個訪問 獲取 該例項的方法。單例類應滿足以下特點 單例類 singleton 自己例項化自己的唯一例項,並提供訪問該唯一例項的方法。public class s...

23種設計模式之單例模式

單例模式 確保乙個類最多只有乙個例項,並提供乙個全域性訪問點 普通單例模式示例 有問題 public class singleton public static singleton getinstance return uniqueinstance 示例singleton public class ...