2010-10-29 36 views
1

我想讓我的頭繞着工廠模式的用法,當我希望禁用應用程序內的功能。應該使用工廠模式來禁用功能嗎?

比方說,比如我有一個工廠叫的LoggerFactory,它創建了一個記錄器實例。

如果在配置日誌記錄在我的應用程序將被禁用:

應該記錄器廠傳回這是一個虛擬的記錄,這並不做任何事情的一個實例?所以使用記錄器的代碼不需要改變。

或者是使用記錄器,如果在配置中禁用不使用記錄器的代碼的責任?

或者是它的記錄器本身並不做任何事情的責任,如果它被禁用?

感謝您的幫助。

+0

負載很大的迴應。這是一個恥辱,我只能將其中一個標記爲答案! – 2010-10-29 09:09:52

回答

2

如果你有很多不同的記錄類(例如日誌記錄文件,並登錄到網絡),那麼我想登錄時返回一個空記錄器被禁用是最簡單,最靈活的解決方案。它不需要更改使用記錄器的代碼,也不需要更改其他記錄器。

使得負責記錄的用戶的想法是不好的,因爲這會分散在整個代碼禁用日誌記錄,從而污染應用邏輯的特徵。

1

使用記錄器的代碼不應該參與啓用/禁用條件。

至於是否使用該知道它一個虛擬禁用記錄器或者只是一個stadanrd記錄儀的禁用這是不太明顯。實際上,我懷疑我們會傾向於發現部分啓用是最常見的情況 - 當大多數被禁用時,一些目的地或消息類將傾向於被髮射。所以我可能會認爲這是記錄器理解其配置的自然工作。

如果這使得記錄器的實現變得非常容易並且這是一種常見的使用場景,那麼我只會使用虛擬設備。

2

恕我直言,這不是關於工廠模式的原則問題。這更多的是關於你的編碼風格設計的問題等。但是,只是爲了提供一個關於你的conrete問題的答案:它會更容易,更直觀和更靈活(1)將對象作爲「空」日誌記錄器類(2)檢查常規記錄器類中的日誌記錄禁用標誌。

+0

原則上的好處,我已將其改爲使用。 – 2010-10-29 08:55:12

+0

+1爲emtpy記錄器 – 2010-10-29 09:07:24