靜態方法(或Scala情況下的單例對象上的方法 - 我只是要調用靜態方法,因爲這是最常用的術語)可以很好地工作,並且可能是最常用的方法對此。
有一些原因使用其他方法,但它們並非嚴格必要,我會避免它們,除非你真的需要他們給的優勢。這是因爲靜態方法是最簡單的(如果最不靈活的)方法。
使用非靜態方法可能很有用,因爲您可以使用設計模式,如工廠模式。例如,您可能有Operator
類和方法evaluate
。現在您可以讓不同的工廠創建不同的Operator
s,以便您可以即時更換您的算法。也許一個計算器可能有AddOperatorFactory
,MultiplyOperatorFactory
等等。顯然這需要你能夠實例化一個代表算法的對象。當然,你可以直接傳遞一個函數,就像Scala和許多其他語言允許的那樣。儘管如此,類允許繼承,這爲某些設計模式打開了大門,而且,您正在問關於OOP的問題,而不是專門針對Scala。
同樣有用的是具有對象狀態的能力。使用靜態方法,您唯一的保留狀態選項是具有全局狀態(ew)或使靜態方法的用戶跟蹤此狀態(爲用戶提供更多工作)。通過一個對象的實例,您可以將該狀態保留在實例中。例如,如果您的算法是圖搜索,也許您希望在找到第一個匹配項後重新開始搜索(顯然需要存儲狀態)。
要做new MyAlgorithm().doStuff()
而不是MyAlgorithm.doStuff()
並不困難,所以如果有疑問,如果您認爲您需要實例提供的功能,那麼我會避免使用靜態方法。
來源
2016-04-27 22:38:09
Kat
特別是在scala中,使用實現過程算法的函數定義來創建一個'object'是微不足道的。是的,它基本上是靜態的,在需要算法或輔助類的類上。 – Bergi
靜態對象也很容易在其他語言中聲明。但我很好奇的是,組織算法的方式適合於OOP語言。我很好奇,如果有這種情況下的常見設計模式,我不知道 – ayvango
當然,爲什麼你認爲它不適合? – Bergi