2010-05-03 131 views
3

我已經得到了所有實現ILOG接口3日誌類:singleton vs工廠?

DatabaseLog 
FileLog 
ScreenLog 

只能有其中的一個實例。最初我雖然爲每個類使用單一模式,但後來我想爲什麼不使用工廠實例化,因爲我不會爲每個類和所有未來的日誌類創建單一模式。

也許有人會希望他們作爲未來的多個對象。

所以我的問題是:我應該在這裏使用工廠或單身模式?

回答

6

創建Logger實例的責任應該放在哪裏?每個班都想登錄?用某種理解總體背景的監督組成部分?

我認爲它更可能是後者,因此工廠將是有意義的。該工廠可以具有決定需要哪種日誌記錄的所有邏輯。

+0

對,我認爲這樣更好。因爲如果其他人在另一個應用程序中使用我的Log類,他可以使用另一種邏輯。謝謝 – 2010-05-03 09:45:45

0

我想在這裏使用一個工廠,一個單例不能滿足您在所有三個類之間的一個實例的需求。

+0

這三個班級之間的含義是什麼? – 2010-05-03 09:44:49

1

那麼如果有人可能想要創建這些類型的多個對象,那麼單例顯然是沒有問題的。

創建一個工廠,讀取日誌從配置文件類型(也許)和返回的ILog參考具體類型

3

單身主義者和工廠模式服務於完全不同的目的。這個單例模式用於確保只有一個類的實例。工廠模式用於抽象對象實例化。你可以使用一個工廠來創建一個單身人士,而工廠本身通常是單身人士,但是沒有一個人與另一個人。它們是互補的而不是反對的模式。

在你的情況下,實現singleton模式可以確保每個類只有一個實例。如果工廠已經存在,您可以使用不創建新實例的工廠。

如果您有一個用於日誌記錄的接口和幾個實現(例如記錄到文件或登錄到網絡),您可以使用工廠動態實例化實現,並隱藏實例化過程,每個過程可能有所不同實現(例如打開文件或打開套接字)。如果這是你想要的,你仍然可以讓你的對象成爲單例。

1

像其他人一樣,我也建議使用工廠。不使用單例時的一個優點是你沒有全局狀態,因此使你的代碼更加可測試。