对象工厂实现

时间:2010-08-30 06:18:09

标签: design-patterns factory-pattern

我想在C#中创建一个对象工厂。我希望我的对象只能通过这个对象工厂创建,如何实现呢?我知道如何创建一个简单的对象工厂,比如使用公共方法创建和初始化对象的satic类。但我需要确保人们只能通过对象工厂创建对象实例,任何想法?

P.S。我不想涉及任何反思,只需使用简单的OOP方法。

2 个答案:

答案 0 :(得分:1)

您必须以某种方式隐藏您希望工厂创建的类的实现,以便唯一可用的方法是使用工厂。否则,您无法阻止人们直接创建该类的实例。如果你不能隐藏类本身,另一种方法是隐藏类的构造函数。最常见的是通过使用私有和包私有类和方法来完成(在java中)。

但考虑到这一点,开发人员需要访问该类并不罕见。一个很好的例子可能是单元测试。

因此,如果您无法完全隐藏它,请考虑如何“阻止”开发人员直接实例化它,但仍然可以将它们用于他们可能不需要使用工厂的那些时间。

答案 1 :(得分:1)

创建一个名为Widget的公共接口。然后使用名为newWidget()的方法创建一个名为WidgetFactory的类;返回Widget。在WidgetFactory“WidgetImpl”中定义一个实现Widget接口的附加类。这将无法在WidgetFactory外部访问。通过创建并返回WidgetImpl的新实例来实现newWidget()。

换句话说,将一个接口与类范围的实现结合使用来隐藏实现。