您現在的位置是:首頁 > 運動

單例模式需要解決哪些問題

由 海口達內教育 發表于 運動2021-12-08
簡介單例模式是為了確保在整個應用期間只有一個例項,以達到使用者的特定的使用目的

為什麼要使用單例模式

軟體開發設計模式是程式設計師在學習軟體開發技術的時候需要重點掌握的一個程式設計技術下面我們就透過案例分析來了解一下,單例模式需要解決哪些問題。

單例模式需要解決哪些問題

單例模式是簡單的設計模式之一,但是它卻存在一些問題與缺陷。下面簡單說下單例模式的使用中需要注意的一些問題。

1。例項指標一定要設為靜態嗎?

因為GetInstance這個方法要用到該例項指標,且GetInstance這個方法是static的,所以這個指標必須是static的,否則GetInstance無法訪問該例項指標。以此同時保證了向其他物件提供的同一個記憶體區的例項指標。

2。為什麼不棄用懶漢式而直接用餓漢式?

先,懶漢式是的以時間換取空間的例子,就是每次獲取例項時都要進行判斷,看是否要建立例項,浪費判斷時間。當然如果一直沒有人用的話,就不會建立例項,則是節約空間。而餓漢式是的以空間換取時間,就是說當類裝載的時候,就創建出一個例項,不管你用不用它,然後每次呼叫時就不用判斷了,節省了執行時間。

這裡說某種方式一定比另一種方式好,它們兩者各有各的優勢。關鍵取決於你在時間和空間上效率的取捨。

3。單例模式只是為了節省資源嗎?

先要說明的是,在一些情況下使用單例模式是可以達到節省資源的目的,但是單例模式的意圖不只是為了節省資源,如果僅僅為了節省資源就使用單例模式的話可能造成單例模式的濫用。單例模式是為了確保在整個應用期間只有一個例項,以達到使用者的特定的使用目的。比如windows作業系統裡,有多個執行緒要同時進行檔案建立、開啟、修改一個檔案的操作時,就用到單例模式設計檔案管理器。所有的檔案操作都必須同個這個的例項來進行檔案操作,避免的混亂的情況。

4。單例模式的壞處?

擴充套件困難,由於GetInstance靜態函式沒有辦法生成子類的例項。如果要拓展,只有重寫那個類。

隱式使用引起類結構不清晰。比如有時候,你並不知道某個類A是單例類,當你讀類B的時候,你可能先看它標頭檔案,或者類視圖裡的內容,從這裡你無法知道A和B關係,因為B類在實現的時候才使用A類的那個所謂的GetInstance函式,讀不到這行,你就會知道B類對A類的依賴關係。

導致程式記憶體洩露的問題。很多人只是呼叫了GetInstance生成的例項,卻永遠new被封裝在GetInstance裡忘了去釋放記憶體。

5。什麼情況下不能用單例模式?

單例模式簡單易用,但是也是所有設計模式中容易濫用的模式。當你的類想得到很好的擴充套件時,不能使用單例模式。

推薦文章