2010-03-15 30 views
0

爲了讓事情簡單化可以說我有一個接口RandomProvider接口從類收集信息的適當方式/模式是什麼?

public interface RandomProvider 
{ 
    double nextRandom(); 
} 

而且說我有這個接口,ARANDOM,布蘭頓,CRandom的3級不同的實現。我想收集關於實現的一些統計數據:

  • nextRandom()多少次叫產生的隨機數
  • 總和(這聽起來很傻,但是這僅僅是一個例子)。

最後這些統計數據將被記錄到數據庫中。這些是來自多個線程的大量使用的類,所以每次請求到來時寫入值都是不可行的。我想到的第一個想法是,我創建一個擁有這些數據的單例,實現調用singleton並增加必要的統計數據。另一個類從單例讀取並將結果寫入數據庫並減少統計數據。但是我已經閱讀了很多關於全球可變數據和單身人士如此惡劣的文章,所以我害怕這樣做。

還有其他想法嗎?

回答

2

是的單身可以是一個邪惡的想法,但它取決於他們的用途。如果你使用單例只是爲了讓你的代碼工作(允許它觸及像全局中心對象的其他類),那麼它是不好的。

但最終你只是在尋找某種方式來記錄信息(記錄器),在這種情況下,使用單例記錄這些數據甚至將其記錄到某些文本/日誌文件並不是一個錯誤的決定。

2

您可以使用AOP來記錄該特定方法的所有調用。檢查AspectJ。基本上你會使用周圍的建議來攔截所有的呼叫,並收集統計數據並進行自定義操作(在這種情況下將隨機數加起來)。然後將其存儲到數據庫中。

相關問題