天天看點

何時使用靜态 API

在進行API設計時,靜态類的使用有時會為設計者帶來一些煩惱。應該将某個函數暴露為靜态函數還是執行個體方法,這一點常常會造成人們的争論。

大部分人學完設計模式後,都會盡量使用單例模式。但是,靜态函數的主要優點在于其簡便性。調用者可以在代碼中的任意位置使用靜态函數,而無需為執行個體的建立、管理以及依賴注入等問題而煩惱。同時,由于沒有建立新的執行個體,因而也不存在垃圾回收的問題,進而使性能也得以提高。

當然,有時靜态API也需要維護一些狀态,這時設計者必須保證靜态函數的線程安全,而這往往牽涉到開銷較大的加鎖與同步等技術。而且即便獨立的調用是線程安全的,但調用者也往往需要将一系列調用過程封裝為一個原子性的事務。

無狀态的盡量設計為靜态。

我在面試應試者時,往往會問的一個問題是:使用單例模式相對于使用靜态方法,有什麼絕對性的優勢?(或者說,有什麼是單例能做到的,但是使用靜态 API 的設計卻無法辦到的?)

讀者,你知道嗎?

繼續閱讀