設計模式 4 單例設計模式

2022-05-29 17:15:13 字數 2789 閱讀 9591

所謂類的單例設計模式,就是採取一定的方法保證整個軟體系統中,對某個類只能存在乙個物件例項,並且該類只提供乙個取得其物件例項的方法(靜態方法)

/**

* 餓漢式(靜態變數)

* 1. 優點: 寫法簡單,就是在類裝載的時候完成例項化。避免了執行緒同步問題

* 2. 缺點:

* (1) 在類裝載的時候完成例項化,沒有達到 lazy loading 的效果。如果從未使用過這個例項,則會造成記憶體浪費

* (2) 這種方法基於 classloader 機制避免了多執行緒的同步問題,不過,instance在類裝載時就例項化,在單例模式中大多數都是呼叫

* getinstance()方法。但是導致類裝載的原因有很多種,因此不能確定有其他方式(或者其他的靜態方法)導致類裝載,這時候初始化 instance

* 就沒有達到 lazy loading 的效果

* */

class singleton01

// 2. 本類內部建立物件例項

private final static singleton01 instance = new singleton01() ;

// 3. 提供乙個公有的靜態方法,返回例項物件

public static singleton01 getinstance()

}

/**

* 餓漢式(靜態**塊)

*/class singleton02

// 2. 本類內部建立物件例項

private final static singleton02 instance ;

static

// 3. 提供乙個公有的靜態方法,返回例項物件

public static singleton02 getinstance()

}

/**

* 起到了lazy loading 的效果,但是只能在單執行緒下使用

* 在多執行緒下,該方式不安全,同步效率太低了

* 開發中,不推薦使用

*/class singleton03

// 提供乙個靜態的公有方法,當使用該方法是=時,才會去建立instance

// 即懶漢式

public static singleton03 getinstance()

return instance ;

}}

/**

* 懶漢式(執行緒安全,同步方法)

* 開發中,不推薦使用

*/class singleton04

// 提供乙個靜態的公有方法,當使用該方法是=時,才會去建立instance

// 即懶漢式

public static synchronized singleton04 getinstance()

return instance ;

}}

/**

* 懶漢式(執行緒安全,同步方法)

* 開發中,不推薦使用

*/class singleton05

// 提供乙個靜態的公有方法,當使用該方法是=時,才會去建立instance

// 即懶漢式

public static singleton05 getinstance()

}return instance ;

}}

/**

* 雙重檢查

* 提供了乙個靜態的公有方法,加入雙重檢查**,解決執行緒安全問題,同時解決家在問題

* 同時保證效率,推薦使用

* 優點:

* 1. double-check概念是多執行緒開發中常使用到的,如**中,我們進行了兩次 if 的校驗,可以保證執行緒安全

* 2. 例項化**只用執行一次,後面再次訪問時,判斷 if (null == instance) , 直接 return 例項化物件,也避免了反覆進行方法同步

* 3. 執行緒安全,延遲載入,效率高

*/class singleton06

// 提供乙個靜態的公有方法,當使用該方法是=時,才會去建立instance

// 即懶漢式

public static singleton06 getinstance()}}

return instance ;

}}

/**

* 1. 採用了類載入的機制料保護初始化例項只有乙個執行緒

* 2. 靜態內部類方法在類載入的時候不會立即唄例項化,而是在需要例項化的時候,呼叫 getinstance()方法,才會在裝載singleinstance類,從而完成例項化

* 3. 類的靜態屬性只會在第一次載入類的時候初始化,所以在這裡, jvm幫助我們保證了執行緒的安全性,在類進行初始化的時候,別的執行緒是無法進入的

* 4. 優點: 避免了執行緒不安全,利用靜態內部類特點實現延遲載入,效率高

* 5. 推薦使用

*/class singleton07

// 寫乙個靜態內部類,該類中有乙個靜態屬性 singleton07

private static class singleinstance

// 提供乙個靜態的公有方法,直接返回例項

public static synchronized singleton07 getinstance()

}

/**

* 推薦使用

*/enum singleton08

}

設計模式4 單例模式

保證乙個類僅有乙個例項,並提供乙個訪問他的全域性訪問點。所有類都有構造方法,假如不對他進行編碼,系統會生成空的public 的構造方法,外部類就能建立這個類的物件。為了不讓其他類能new出這個類的例項,所以需要寫乙個private 的構造方法 其實即使使用private修飾,通過反射機制還是能在外部...

設計模式 4 單例模式

單例模式屬於建立型的設計模式,其特點是在於保證乙個類只會被例項化一次,可以作為全域性唯一資源提供給系統。此處通過判斷兩個例項的位址是否一致來驗證單例模式,中包含了保證多執行緒安全的單例模式實現。由於python下的懶漢單例模式實現本人覺得是不可能的,因此下面使用了double check的方式實現了...

設計模式 4 單例模式

單例模式用來確保乙個類只有乙個例項,並提供乙個全域性訪問點。在所有的設計模式中,單例模式是最簡單也是最常用的一種設計模式,它只為乙個例項提供乙個全域性物件,內次嘗試去獲取乙個類的例項的時候,保證獲取到的都是這乙個物件。下面是關於單例模式中的一些小概念 餓漢式和懶漢式區別 餓漢就是類一旦載入,就把單例...