Java在實用程序類(具有靜態方法的類)和Service類(具有提供「服務」的公共方法的類)之間有什麼區別。例如,人們可以爭辯說,一個加密對象(提供加密,解密,散列或獲取salt值的方法)是一個服務提供者,但許多組將這個功能組合到具有靜態方法的Utility類中,如CryptoUtil.encrypt(.. )。我試圖弄清楚哪種方式更符合「設計」。思考?Java實用程序類與服務
30
A
回答
19
不同的行爲,可以通過使用不同的服務對象來獲得。工具類中的靜態方法不能被換出。這對測試,更改實現和其他目的非常有用。
例如,您使用encrypt
方法提及CryptoUtil
。如果有不同的對象可以支持不同的加密策略,不同的消息接收者等,這將非常有用。
7
區別在於服務類可能有狀態。而我所說的狀態是指交談狀態。考慮一個名義上的訂購系統。
interface OrderSystem {
void login(String username, String password);
List<Item> search(String criteria);
void order(Item item);
void order(Item item, int quantity);
void update(Item item, int quantity);
void remove(Item item);
void checkout();
Map<Item, Integer> getCart();
void logout();
}
這樣的事情可能有狀態會話bean來完成(作爲一個例子),但在這種情況下,認證可能會被覆蓋了傳統的EJB機制。
這裏的要點是會話狀態在於一次調用的結果影響後續調用。您可以將靜態方法視爲一組本地執行的簡單無狀態服務。
服務具有包括更廣泛的含義,但不限於,存在:
- 狀態;
- remote;和
- 實施依賴(即通過一個接口)。
我認爲最好的做法是簡單地使用靜態方法作爲便捷方法(尤其是給定Java缺乏擴展方法)。服務比這更豐富。
0
我認爲沒有硬性規定。
我通常使用靜態方法來獲得需要很少參數的功能,並且可以在單個方法調用中完成。例如:
- 計算哈希值的字符串
- 轉換日期標準表示
如果功能需要很多參數,如果有正創建了一些相關的結果,那麼它更實際上有一個類可以接受它的構造函數中的共享參數,以及幾種執行實際操作的方法。
典型的例子:一個數據庫連接,你先連接,然後用做查詢,然後用得到的結果...
0
我以前在什麼地方在這裏回答了這個問題,但我發現,這是很容易改變一個服務的行爲 - 將它重構爲多個服務 - 它需要一個相當顯著重構,如果您使用靜態類。
如果這是唯一的區別(我相信它),那麼使用靜態類永遠沒有任何意義。
任何時候有人說「永遠不會超過1個這樣的」,代碼爲n個。
3
你不能重載靜態方法,如果你想以兩種不同的方式實現你的服務並在它們之間切換,這可能是一個巨大的問題。出於這個原因,我將靜態工具類的用途限制在「永不」(對於「永不」:)足夠長的值)中的簡單事情需要以多種方式完成。
相關問題
- 1. Java活動服務類和Java活動應用程序類
- 2. Java編程中的實用程序類
- 3. 的java調用應用程序無法與WCF服務comunicate
- 4. Java與C++:使用Web服務的應用程序的性能
- 5. 測試Java Spark微服務應用程序,實現SparkApplication接口
- 6. 使用遠程服務的Java序列化和實例共享
- 7. 將服務注入Ember實用程序
- 8. Java應用程序服務器和JVM
- 9. FCM XMPP java服務器應用程序
- 10. Java應用程序如窗口服務
- 11. mod_pagespeed和java應用程序服務器
- 12. Java Web服務器應用程序
- 13. Python Web服務的Java應用程序?
- 14. Java實用程序類問題
- 15. ASP.NET MVC應用程序最佳實踐中的服務層類
- 16. 實用程序類爲服務於不同的TabItems
- 17. Windows服務與Windows應用程序 - 最佳實踐
- 18. Android應用程序與Web服務實現
- 19. 如何確定Java EE 6應用程序服務器類型?
- 20. Java EE應用程序服務器如何找到類路徑?
- 21. 與運行Java應用程序和Web服務器不工作
- 22. java 2客戶端應用程序與服務器通信
- 23. Java小應用程序在tomcat服務器上與servlet通信
- 24. 集成服務器端java與cordova應用程序
- 25. Java應用程序與服務器和Rails集成?
- 26. C#獨立應用程序與java後端web服務
- 27. .NET應用程序服務器與Java應用程序服務器之間的區別
- 28. Web應用程序與Spring - 在服務
- 29. Android應用程序與XAMPP服務器
- 30. iOS應用程序與雲服務
靜態變量將保留靜態類的狀態。不是說我鼓勵靜態類 - 我只是在說... – 2009-05-16 02:57:26
我在靜態狀態下看到的大多數類都是我稱之爲'我希望我是單身'的模式的例子。 – 2009-05-16 03:32:14
靜態類中的靜態是我瞭解(如果不是最好的)進入併發問題驚人世界的最佳方式之一。只是在說'... – 2010-12-13 12:18:09