單例模式實現的幾種方式

2021-10-05 22:14:41 字數 1551 閱讀 5951

單例模式三個主要特點:

1、構造方法私有化;

2、例項化的變數引用私有化;

3、獲取例項的方法共有。

package com.ctl.singleton;

/** * 懶漢式單例

* 該模式的特點是類載入時沒有生成單例,

* 只有當第一次呼叫 getlnstance 方法時才去建立這個單例

* ** 注意:如果編寫的是多執行緒程式,

* 則不要刪除上例**中的關鍵字 volatile 和 synchronized,

* 如果不刪除這兩個關鍵字就能保證執行緒安全,

* 但是每次訪問時都要同步,

* 會影響效能,且消耗更多的資源,

* 這是懶漢式單例的缺點

*/public class lazysingleton //private 避免類在外部被例項化

public static synchronized lazysingleton getinstance()

return instance;

}}

package com.ctl.singleton;

/** * 餓漢式單例

* 該模式的特點是類一旦載入就建立乙個單例,

* 保證在呼叫 getinstance 方法之前單例已經存在了。

* ** 餓漢式單例在類建立的同時就已經建立好乙個靜態的物件供系統使用,

* 以後不再改變,所以是執行緒安全的,

* 可以直接用於多執行緒而不會出現問題。

*/public class hungrysingleton

public static hungrysingleton getinstance()

}

package com.ctl.singleton;

/** * 雙檢鎖/雙衝校驗鎖(推薦)

* 這種方式採用雙鎖機制,安全且多執行緒情況下保持高效。

*/public class doublechecksingleton

public static doublechecksingleton getinstance()}}

return instance;

}}

package com.ctl.singleton;

/** * 靜態內部類建立單例(懶載入)(推薦)

* 這種方式能達到雙檢索方式的功效,堆靜態域使用延遲載入,實現簡單。

* 這種方式只適用於靜態域的情況,雙檢索方式可在勢力域需要延遲初始化時才使用

*/public class singletonin

private singletonin()

public static final singletonin getinstance()

}

package com.ctl.singleton;

/** * 列舉單例(推薦)

*/public enum enumsingleton

}

單例模式的幾種實現方式

單例模式莫過於是我們最常用的設計模式之一了,它的優缺點就是 優也單例,缺也單例 當然應用它方面優點還是較多些的,所以下面我們看看,常用的幾種實現方式有哪些吧。這種是最基本的實現方式,最大的問題就是不支援多執行緒,由於沒有加鎖,嚴格上並不算單例模式。public class singleton pub...

單例模式的幾種實現方式

public class person private person person new person 出現stackoverflowerror錯誤 因為建立物件需要呼叫構造方法執行 構造方法執行在棧記憶體中 每次建立物件需要載入屬性 該屬性又是當前類物件 造成無限迴圈建立物件 最終棧記憶體壓滿 ...

單例模式的幾種實現方式

實現方式大致分為兩種 懶漢模式 在第一次使用該物件時,才會初始化例項,以免了資源的浪費,同時,需要考慮的是執行緒安全問題。餓漢模式 在類初始化時就需要建立乙個例項物件出來,當時並不一定會使用該物件,可能會造成資源的浪費,好處是不用考慮安全問題。下面看下幾種常見的實現方式 首先看懶漢模式 1 執行緒非...