我想在 C# 中创建一个对象工厂。我希望我的对象只能通过这个对象工厂创建,如何实现呢?我知道如何创建一个简单的对象工厂,例如具有创建和初始化对象的公共方法的 satic 类。但我需要确保人们只能通过对象工厂创建对象实例,有什么想法吗?
PS我不喜欢涉及任何反射,只需使用普通的OOP方法。
我想在 C# 中创建一个对象工厂。我希望我的对象只能通过这个对象工厂创建,如何实现呢?我知道如何创建一个简单的对象工厂,例如具有创建和初始化对象的公共方法的 satic 类。但我需要确保人们只能通过对象工厂创建对象实例,有什么想法吗?
PS我不喜欢涉及任何反射,只需使用普通的OOP方法。
您将不得不以某种方式隐藏您希望工厂创建的类的实现,以便唯一可用的方法是使用工厂。否则,您无法阻止人们直接创建该类的实例。如果不能隐藏类本身,另一种技术是隐藏类的构造函数。最常见的是(在 java 中)通过使用私有和包私有类和方法来完成。
但是考虑到这一点,开发人员需要访问该类的情况并不少见。一个很好的例子可能是单元测试。
因此,如果您不能完全隐藏它,请考虑如何“阻止”开发人员直接实例化它,但在他们可能不需要使用工厂的时候仍然可以使用它。
创建一个名为 Widget 的公共接口。然后使用名为 newWidget() 的方法创建一个名为 WidgetFactory 的类;它返回小部件。在 WidgetFactory "WidgetImpl" 内部定义一个附加类,它实现了 Widget 接口。这将无法在 WidgetFactory 之外访问。通过创建并返回一个新的 WidgetImpl 实例来实现 newWidget()。
换句话说,将接口与类范围的实现结合使用来隐藏实现。