設計模式之一 單例模式

2021-09-01 22:26:15 字數 1672 閱讀 2322

單例模式屬於建立型模式,負責建立物件,確保始終建立的物件是唯一的,是單個的(記憶體位址唯一性)。

單例模式有兩種懶漢是和餓漢式

建立方式:

1  私有的構造方法

2 物件唯一性採用static

3 對外提供公開訪問物件方法

public class singletontest 

private static singletontest1 singleton = new singletontest();

public static singletontest1 getsingleton()

}

類載入時物件就已經被建立出來,浪費記憶體,static確保物件的個數是唯一,多執行緒下執行緒是安全。

public class singletontest 

private static singletontest singleton = null;

public static singletontest getsingleton()

}

單執行緒下執行緒安全,多執行緒下執行緒不安全。

我們進行優化,採用synchronized關鍵字加鎖

public  static synchronized singletontest getsingleton()

private static singletontest singleton = null;

public static singletontest getsingleton()}}

return singleton;

}}

多執行緒下效率也高,當多個執行緒同時進入到  if(singleton == null) 這兒,發現該物件為null , 此時執行緒進行排隊, 然後進行鎖的釋放,之後別的執行緒在進入的時候,在進行判斷發現物件不為null,直接跳出判斷,下一次直接走最外層判斷,從而提高效率。

看了網上大神的部落格,可以用靜態內部類來建立單例

/**

*@description: 靜態內部類寫法

*@author: wangl

*@time: 2019/2/14 17:23

*@version 1.0

*/public final class singleton

private singleton (){}

public static final singleton getsigle()

public static void main(string args)

}

執行如下

com.example.bwjf.demo.sss@1d56ce6a

com.example.bwjf.demo.sss@1d56ce6a

com.example.bwjf.demo.sss@1d56ce6a

com.example.bwjf.demo.sss@1d56ce6a

也可以達到效果,靜態內部類,這種和餓漢式原理相似。都是在類載入的時候建立出物件。

設計模式之一單例模式

單例模式就是類別只有乙個例項,每次在必得類呼叫這個類的例項,都是同乙個例項。通過單例模式可以保證系統中乙個類只有乙個例項而且該例項易於外界訪問,從而方便對例項個數的控制並節約系統資源。如果希望在系統中某個類的物件只能存在乙個,單例模式是最好的解決方案。如印表機 顯示卡等等這些系統資源。如果做andr...

設計模式之一 單例模式

單例模式,是一種常用的軟體設計模式。在它的核心結構中只包含乙個被稱為單例的特殊類。通過單例模式可以保證系統中乙個類只有乙個例項。即乙個類只有乙個物件例項。定義乙個單例類,使用類的私有指標變數指向類的唯一例項,並且使用乙個共有的靜態方法獲取該例項。懶漢模式 即第一次呼叫該類的例項的時候才產生乙個新的該...

設計模式之一 單例模式

一.什麼是單例模式 某個類同時保留乙個物件,不希望有更多物件,此時,我們則應考慮單例模式的設計。二.單例模式的特點 1.單例模式只能有乙個例項。2.單例類必須建立自己的唯一例項。3.單例類必須向其他物件提供這一例項。三.單例模式vs靜態類 在知道了什麼是單例模式後,我想你一定會想到靜態類,既然只使用...