設計模式(二) 單例模式

2021-07-31 02:09:51 字數 912 閱讀 4883

單例模式:用來建立只能有乙個例項的物件。確保乙個類只有乙個例項,並提供乙個全域性訪問點。

有的時候我們不希望乙個類被建立出多個物件,因為多個例項會帶來許多不好的影響。

經典單例模式:

public

class

singleinstance

public

static

singleinstance getinstance()

return

instance;

}...........

}

在類中定義靜態變數記錄類的唯一例項,然後定義乙個私有的構造器,這樣外部便無法例項化,再宣告乙個getinstance()方法例項化物件,並返回例項。

這樣,當外部想例項化時,只需要呼叫singleinstance.getinstance()方法便可獲得唯一的例項。

但是上述經單例模式在處理多執行緒時還是會遇到錯誤,經常會被多個執行緒同時呼叫。

通過增加synchronized關鍵字到getinstnce()方法中,變成同步方法,就可以解決多執行緒問題。

但是同步方法會引發效能問題,每次都要同步這個方法,但事實上只要第一次同步即可。

所以最完善的辦法便是採用 」雙重檢查加鎖「,在getinstance()方法中減少使用同步。

public

class

singleinstance

public

static

singleinstance getinstance()}}

return

instance;

}}

private volatile static singleinstance instance;

getinstance()方法只在第一次徹底執行全部**。

設計模式 二 單例模式

建立乙個物件並不難,但當我們不得不為每新新增一種抽象類或介面而到處修改客戶 時,就不得不思考直接使用new建立物件帶來的高耦合。建立型別的模式將使用物件和 例項化物件 進行了分離。建立型別模式包括 單例模式 工廠方法模式 原型模式。下面先看單例模式 單例模式 保證乙個類在系統裡只有乙個例項化物件。應...

設計模式(二)單例模式

單例模式 保證只有乙個物件,每次獲取物件獲取到的都是同乙個物件。單例模式是我們程式中最常見的設計模式,很多任務具類都設計成單例模式,spring中的bean也有單例,單他不是真正的單例。單例模式總結下來有幾種寫法,他們共性就是私有的構造方法。package com.designpattern.sin...

設計模式《二》單例模式

確保乙個類有且僅有乙個例項,並且提供乙個全域性的訪問點。通俗地說就是,物件只能生成乙個,並且生成該物件的方法只有乙個。單例模式的使用是為了只產生乙個例項,從產生乙個例項的原因及作用來看 1.對頻繁生成銷毀的類避免了資源的浪費。2.達到了不同執行緒之間的資料共享。單例模式的經典實用,比如windows...