2010-08-30 93 views
0

我想在C#中創建對象工廠。我希望我的對象只能通過這個對象工廠創建,如何實現這一點?我知道如何製作一個簡單的對象工廠,例如使用正在創建和初始化我的對象的公共方法的satic類。但我需要確保人們只能通過對象工廠創建對象實例,有什麼想法?對象工廠實現

P.S.我不想涉及任何反思,只是使用普通的OOP方法。

回答

1

創建一個名爲Widget的公共接口。然後用一個名爲newWidget()的方法創建一個名爲WidgetFactory的類;它返回Widget。在WidgetFactory「WidgetImpl」中定義一個實現Widget接口的附加類。這將不能在WidgetFactory之外訪問。通過創建並返回一個新的WidgetImpl實例來實現newWidget()。

換句話說,將接口與類作用域實現結合使用來隱藏實現。

+0

非常好!真的很感謝你!這就是我正在等待的答案! – 2010-09-01 02:00:16

1

您將不得不以某種方式隱藏您希望工廠創建的類的實現,以便唯一可用的方法是使用工廠。否則,你不能阻止人們直接創建類的實例。如果你不能隱藏類本身,另一種技術是隱藏類的構造函數。通常這是通過使用私有和包私有類和方法完成的(在java中)。

但考慮到這一點,開發人員需要訪問該類並不罕見。單元測試可能是一個很好的例子。所以如果你不能完全隱藏它,考慮如何能夠「阻止」開發者直接實例化它,但仍然有可用於那些他們可能不需要使用工廠的時間。

+0

是的,我知道你可以寫推薦。但我很感興趣,如果我需要這個,是不是有一個很好的解決方案呢?我想過你的私有構造函數+包(私人+內部的C#可能)的想法。實際上,您可以將工廠創建的類和工廠本身放入一個程序集,並將構造函數置於內部。可能它會解決問題。但我仍然在尋找其他方法。 – 2010-08-30 06:39:15

+0

我不知道C#。但我明白它與Java非常相似。所以我認爲它有私人和私人包裝的概念。 – drekka 2010-08-30 06:42:27