日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

设计模式----单例模式实例

發布時間:2025/3/19 asp.net 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 设计模式----单例模式实例 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

單例模式通常分懶漢和餓漢兩種模式。

1、懶漢單例模式

? ? ? ? ?可以理解為懶漢模式創建的類,非常懶,只有在被調用時才會判斷自身是否已有對象,如果沒有就立即創建自身對象,然后返回。如果已有對象就立即返回。

public Class Single{private static Single intance = null;private Single(){};//私有默認構造器public static synchronized Single getIntence(){//添加同步鎖,防止多線程同時進入造成多次實例化if(intence==null){intance = new Single();}return intance;} }

????????? ? 優點:調用時才會初始化,避免資源浪費。

????????? ? 缺點:加了synchronized鎖,影響效率?。? ?? ??

?

2、餓漢單例模式

? ? ? ? 可以理解為餓漢模式創建的類都很饑渴,在類加載的時候就創建對象。

public Class Single{private static Single intance = new Single();//當類加載時就調用自身private Single(){};public static Single getIntance(){return intance;} }

? ? ? 優點:1、線程安全,在類加載時創建實例不存在在運行過程中,多個線程創建多次實例,避免了多線程同步的情況。

????????????? ?2、調用時速度快。

????? 缺點:資源效率不高,如果之后沒有用到getinstance()的話,會造成資源浪費。

?

下面介紹幾種單例模式為常用細分類:

????? ?1、懶漢模式不安全(lazy loading)

????? ? 嚴格意義上不是單例模式,這種模式不能在多線程環境下使用。

public Class Single{private static Single instance;private Single();public static Single getInstance(){ //未加安全鎖,大家一起用if(instance == null){instance = new Single();}return instance;} }

? ? ? 很明顯這種方式不適合在多線程下使用。

????? ? 下面這幾種都適合多線程使用。

? ? ? ?2、雙重檢驗鎖/雙檢鎖

? ? ? ?他是懶漢的一種,這種方式采用了雙鎖機制,在安全下保持高性能。

public Class Single{private static Single instance;private Single();public static Single getInstance(){if(instance == null){synchronized(Single.class);if(instance == null){instance = new Single();}}}}

? ? ? ? 可在實例域需要延遲初始化的時候使用。

? ? ? ? 3、登記式/靜態內部類

? ? ? ? 對靜態域進行延遲初始化應用這種方式而不用雙檢鎖。

public Class Single{private static class SingleHandler{private static final Single instance = new Single();}private Single(){};public static final Single getInstance(){return SingleHandler().instance;} }

? ? ?這種方式就是Single類被加載后,instance不一定被實例化。如果實例化 instance 很消耗資源,所以想讓它延遲加載,另外一方面,又不希望在 Singleton 類加載時就實例化,因為不能確保 Singleton 類還可能在其他的地方被主動使用從而被加載,那么這個時候實例化 instance 顯然是不合適的。

? ? ? ? ?4、枚舉

? ? ? ? ?這種方式是 Effective Java 作者 Josh Bloch 提倡的方式,它不僅能避免多線程同步問題,而且還自動支持序列化機制,防止反序列化重新創建新的對象,絕對防止多次實例化。他不具有懶漢的特性。由于 JDK1.5 之后才加入 enum 特性,在實際工作中,很少用。

? ? ? ? ? ? 不能通過 reflection attack 來調用私有構造方法。

public enum Single(){instance;public void method(){} }

總結??

? ? ? ? ?通常,不建議使用懶漢模式不安全和synchronizad懶漢方式,建議使用餓漢方式。只有在要明確實現 lazy loading 效果時,才會使用登記式。如果涉及到反序列化創建對象時,可以嘗試使用枚舉方式。如果有其他特殊的需求,可以考慮使用雙檢鎖方式。

總結

以上是生活随笔為你收集整理的设计模式----单例模式实例的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。