2009-09-15 43 views
7

我想知道工廠模式是否存在相反的模式。例如,當需要刪除某個對象時,需要完成一些額外的工作,以撤消在工廠對象中執行的配置。哪種設計模式與工廠模式相反?

擴展與例如刪除方法工廠對象似乎是錯誤的,因爲工廠模式是嚴格的創建模式。

更新:爲什麼我使用了一個工廠的原因是因爲它需要做的配置會引入一些依賴於這將不適合的對象。在構造函數中放置這個解除配置會導致同樣的問題。

+2

你的意思是「刪除」是什麼意思?從內存中釋放,還是從數據存儲中移除? – 2009-09-15 07:54:11

+0

刪除我的意思是從數據存儲中刪除它,這將由存儲庫完成。 – 2009-09-15 07:58:31

+0

以及在工廠對象中執行了哪種「配置」?一個對象應該能夠自行清理,解構和/或處置任務。我認爲工廠不應該知道它創建的任何對象。 – 2009-09-15 08:03:24

回答

3

這是使用工廠正道。工廠不僅是創建對象的方式,也是說方式:我需要對這些對象進行特殊的初始化。有了你的問題,我認爲最好的解決方案是通知工廠一些事件,如處置。因此,您的對象創建將以這種方式完成:創建,訂閱工廠到新創建對象的事件。每次刪除對象,你都會通知工廠並執行你需要的操作。

如果你不喜歡把它放到工廠,你可以把它委託給某種其他對象,比如DeathKeeper ;-)。所以,你的代碼看起來sometihng這樣的:

//Inside factory create method 
MyObject obj = GetNewInitializedObject(); 
_detahKeeper.RegisterObject(obj); 

return obj; 

現在,每當你將需要刪除的對象的時候,你的對象會通知死亡門將,它將使所有處置邏輯。順便說一下,我不知道它是如何工作的,但是您可以使用IDisposable接口來執行用於處理由對象保存的資源的自定義邏輯。這個決定取決於你的項目中有什麼,取決於你。

4

存儲庫可以用來刪除一個持久對象,或者您可以使用Dispose方法做一些清理上只在內存中的對象。

+0

我現在將把這個「取消配置」放入存儲庫中。 – 2009-09-15 08:48:49

+0

您是否需要銷燬任何持續的(數據庫/文件)信息? – 2009-09-15 11:02:03

2

我用的是「回收設施」模式協同工作,與工廠:

  • 爲每個可循環
  • 有一個「唯一ID」爲每個對象類的一個「乾淨」的方法實例

每次對象到達其端部的壽命,將其發送到「回收設施」(RF):

  • RF根據某些策略(例如,只保留Y級的X實例)
  • 當需要Y類的一個實例,本廠​​以「問」如果有一個
    • 如果RF有一個方便的RF,射頻所謂的「乾淨()上的實例」的方法,並返回到出廠

...等等等等。

希望這會有所幫助。