2010-08-30 94 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