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

歡迎訪問 生活随笔!

生活随笔

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

asp.net

[设计模式笔记]3.单例模式

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

單例類只能有一個實例

單例類必須自己創建自己的唯一實例

單例類必須提供給所有其他對象這個實例

?

單例類有私有的構造方法和本身的一個靜態實例對象

單例類向外界提供一個可訪問的靜態方法,供外界獲取它的靜態實例。

目的:保證一個類有且僅返回這一個實例對象。


Public class SingleObject {Private static SingleObject instance = new SingleObject()Private SingleObject() {} Private static SingleObject getInstance() {Return instance; } Public void showMsg() {System.out.println(“show message”); } }

解決:一個全局使用的類頻繁地創建和銷毀。

構造方法是私有的決定了外界無法調用構造方法創建實例,必須通過單例類提供的靜態方法獲取唯一的類靜態實例。


單例模式的幾種實現方式:

1.????懶漢式,線程不安全

Lazy初始化:是

????? ?? 多線程安全:否

?????? ?? 嚴格來說不算單例模式。

Public static getInstance() { if(instance == null) {instance = new SingleObject(); } Return instance; } 2.? ? 懶漢式,線程安全

Lazy初始化:是

線程安全:是

優點:第一次調用才生成實例,避免浪費內容

缺點:必須加鎖synchronized才能保證單例,加鎖會影響效率

Public class SingleObject {Private static SingleObject instance;Private SingleObject() {}Public static synchronized SingleObject getInstance() {If(instance == null) {Instance = new SingleObject(); } Return instance; } }

3.? ?餓漢式

Lazy初始化 否

線程安全 是

優點 沒有加鎖,提高效率

缺點 類加載時就生成實例,浪費內容

實質 基于classloder機制避免了多線程同步問題,產生類裝載的情況不少,但大多是調用單例的getInstance方法,也存在其他例如調用其他靜態方法的情況,這種情況下顯然沒達到lazyload的效果

Public class SingleObject {Private static SingleObject instance = new SingleObject()Private SingleObject() {} Private static SingleObject getInstance() {Return instance; } Public void showMsg() {System.out.println(“show message”); } }

4.????雙檢鎖

Lazy 初始化是

線程安全 是

鎖代碼塊的好處,提高效率,過濾掉已經存在實例的對象

也不能鎖this Synchronized(this), 因為靜態方法在類加載時就產生,類對象還沒生成。

Synchronized(SingleObject.class) = static synchronized void getInstance(){}Public class SingleObject {Private volatile static SingleObject instance = new SingleObject();Private SingleObject() {}Private static SingleObject getInstance() {if(instance == null) {synchronized (SingleObject.class) {if(instance == null) {instance = new SingleObject(); } Return instance; } } } }

5.????登記式、靜態內部類

Lazy初始化 是

線程安全 是








總結

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

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