我想在C#中创建一个对象工厂。我希望我的对象只能通过这个对象工厂创建,如何实现呢?我知道如何创建一个简单的对象工厂,比如使用公共方法创建和初始化对象的satic类。但我需要确保人们只能通过对象工厂创建对象实例,任何想法?
P.S。我不想涉及任何反思,只需使用简单的OOP方法。
答案 0 :(得分:1)
您必须以某种方式隐藏您希望工厂创建的类的实现,以便唯一可用的方法是使用工厂。否则,您无法阻止人们直接创建该类的实例。如果你不能隐藏类本身,另一种方法是隐藏类的构造函数。最常见的是通过使用私有和包私有类和方法来完成(在java中)。
但考虑到这一点,开发人员需要访问该类并不罕见。一个很好的例子可能是单元测试。
因此,如果您无法完全隐藏它,请考虑如何“阻止”开发人员直接实例化它,但仍然可以将它们用于他们可能不需要使用工厂的那些时间。
答案 1 :(得分:1)
创建一个名为Widget的公共接口。然后使用名为newWidget()的方法创建一个名为WidgetFactory的类;返回Widget。在WidgetFactory“WidgetImpl”中定义一个实现Widget接口的附加类。这将无法在WidgetFactory外部访问。通过创建并返回WidgetImpl的新实例来实现newWidget()。
换句话说,将一个接口与类范围的实现结合使用来隐藏实现。