設計模式2 單例模式

2021-08-28 06:35:13 字數 1682 閱讀 9286

確保乙個類中只有乙個例項,自行例項化並向整個系統提供這個例項,這個類被稱為單例類,它提供全域性的訪問方法

在類中只有乙個例項,並提供乙個靜態的getinstacne()方法用於外界唯一訪問這個例項

防止在外部對其實例化,建構函式私有化

在單例類內部定義了乙個singleton型別的靜態物件,作為外部共享的唯一例項

windows作業系統中的任務管理器,**站等,在系統中都只有乙個例項,是典型的的單例模式

顧名思義,既然是惡漢,肯定是飢不擇食啦,所以不管三七二十一,在類載入的時候就把例項給建立出來咯

//餓漢式

public class singletondemo2

public static singletondemo2 getinstance()

}

優點:不用考慮執行緒同步問題

缺點:如果getinstance方法,則會造成資源浪費

建立例項這麼麻煩的事情。。當然要拖到最後一刻啦,等需要用到例項的時候再建立

//懶漢式

public class singletondemo1

public static synchronized singletondemo1 getinstance()

return instance;

}}

優點:延遲載入,資源利用率提高

缺點:同步造成併發效率低

在之前的懶漢式中,它的缺點非常明顯,為了保證在多執行緒的工作下能正常工作,它進行了同步,下乙個執行緒想要獲取物件,就必須等待上乙個執行緒釋放鎖之後,才可以繼續執行。但是百分之99.9的情況下都是不需要同步的,所以它的效率是非常低的,於是我們進行優化,避免整個方法被鎖,只對需要鎖的**部分加鎖,可以提高執行效率。

//雙重校驗鎖

public class singletondemo3

public static singletondemo3 getinstance()

}}

return instance;

}}

//靜態內部類

public class singletondemo4

private singletondemo4()

public static singletondemo4 getinstance()

}

外部類沒有static屬性,則不會像餓漢式那樣立即載入物件。

只有真正呼叫getinstance(),才會載入靜態內部類。載入類時是執行緒 安全的。 instance是static final型別,保證了記憶體中只有這樣乙個例項存在,而且只能被賦值一次,從而保證了執行緒安全性.

兼備了併發高效呼叫和延遲載入的優勢!

public enum singletondemo5 

}

•優點:

–實現簡單

–列舉本身就是單例模式。由jvm從根本上提供保障!避免通過反射和反序列化的漏洞!

•缺點:

–無延遲載入

篇中對單例模式進行了簡單介紹,同時介紹了它的五種典型的實現方式

設計模式 2 單例模式

單例模式,也是非常好理解的一種設計模式。單例,也叫單件,目的是為了保證乙個類只有乙個例項。當然,沒使用上單例模式的時候,在 實現時候,注意不要隨便new某個物件,這 的確可以,但很不安全。因此簡單 一處理,乙個單例模式便出來了。using system using system.collection...

設計模式2 單例模式

單例模式 只能建立乙個例項化物件,屬於建立型模式 注 該類私有構造方法 該類只能自己建立自己的例項 實現方式有5種,分別是惡漢模式 懶漢模式,雙檢鎖 雙重校驗鎖,匿名內部類和列舉 public class singleton public static singleton getinstance 只...

設計模式2 單例模式

單例模式解決的問題就是 保證乙個類只能例項化乙個物件。一般我們保證乙個類只有乙個例項化物件時,做法是 public class car 如果這個brake物件不是僅供這乙個car類使用類呢?這樣做只保證了在乙個car物件有乙個brake,多個car物件或者其他使用brake的類例項就會有多個brak...