什麼因素影響合適的設計模式?單身和靜態實用程序類
澄清:
我之所以問這個問題,是因爲我設計需要多個靜態工廠類和單管理類的應用程序。有時,我變得困惑,其設計我應該的員工,我想提出這個社區爲什麼和當可能有助於澄清事情對我來說一點。
什麼因素影響合適的設計模式?單身和靜態實用程序類
澄清:
我之所以問這個問題,是因爲我設計需要多個靜態工廠類和單管理類的應用程序。有時,我變得困惑,其設計我應該的員工,我想提出這個社區爲什麼和當可能有助於澄清事情對我來說一點。
我使用的靜態工具類爲共享函數,將從許多不同的上下文中調用 - 數學函數類似於java.util.Math中的函數。假設這些是「純」功能(即不操作任何狀態或訪問除給定參數以外的任何數據),這是一個合適的模式。
我很少使用的單身人士,特別是儘量避免全局單。他們患有與全局變量相關的所有常見問題。他們使測試變得困難,除非你的單身也不可變,否則他們會引入全局狀態的問題。遍歷序列時,你可以測試是否(對象== END_OF_SEQUENCE_MARKER)
public static final END_OF_SEQUENCE_MARKER=new EndMarker();
然後:比如 - 我發現它們非常有用的主要場所是依賴於對象標識性能黑客。因爲它是一個靜態的最終參考,JIT將把它變成一個非常快速的測試....
編輯
已經剛剛看到你的澄清,一些快速的額外評論:
辛格爾頓時使用一個單一的對象需要被實例化,並且所有請求對象的訪問經歷此特定實例。如果需要,該對象可以保持狀態。當你有一類就是剛無國籍實用功能..它不維護狀態
靜態工具被使用。該對象的一個實例從未實例化。
你是什麼意思,班級維護一個國家(什麼狀態)? – Mercury 2016-12-28 16:35:34
我不確定這裏的問題是什麼。
辛格爾頓模式被用在該實例具有可以保留或跨呼叫的數量改變狀態 - 這可能是一個連接池或其他一些共享對象的類提供了訪問。
靜態工具類用於其中每個單獨的方法是無狀態的,並且對所述類提供了其它方法沒有關係。
IMO靜態工具類粉筆下來電者和班級之間的具體合同。這與單身人士不同,您可以在幕後更改實施方案,以便每次撥打電話getInstance
時,讓所謂的「單身人士」提供者發出新實例。
所以是的,基本上使用靜態工具方法,當你確定(例如Math
)你永遠不需要一個實例,並且當你認爲單個實例足夠好,但可能會改變未來(例如連接提供商)。
這非常模糊...... – 2011-04-07 14:45:41
均等化,儘管您可能希望在不久的將來對您的問題進行更具描述性的描述。 :-) – 2011-04-07 14:49:41
我想這是什麼stackoverflow人們認爲脫離主題。如果你表達你的問題的動機並展示一些真實的例子,那麼答案可能更集中。否則,這可能是一個過於寬泛和主觀的問題。 – 2011-04-07 14:50:31