Design patterns 对象工厂实现

Design patterns 对象工厂实现,design-patterns,factory-pattern,Design Patterns,Factory Pattern,我想在C#中创建一个对象工厂。我希望我的对象只能通过这个对象工厂创建,如何实现这一点?我知道如何创建一个简单的对象工厂,比如带有创建和初始化对象的公共方法的satic类。但我需要确保人们只能通过对象工厂创建对象实例,有什么想法吗 另外,我不喜欢涉及任何反射,只需使用简单的面向对象方法。您必须以某种方式隐藏希望工厂创建的类的实现,以便唯一可用的方法是使用工厂。否则,您无法阻止人们直接创建该类的实例。另一种技术是,如果无法隐藏类本身,则隐藏类的构造函数。最常见的是(在java中)通过使用私有和包私有

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


另外,我不喜欢涉及任何反射,只需使用简单的面向对象方法。

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

但是考虑一下,开发人员需要访问类的情况并不少见。一个很好的例子可能是单元测试


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

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


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

是的,我知道您可以编写推荐。但是我很感兴趣,如果我需要这个,有没有一个好的解决方案?我考虑过你的私有构造函数+包(可能是C#中的私有+内部)的想法。实际上,您可以将工厂创建的类和工厂本身放入一个程序集中,并使构造函数成为内部的。也许它会解决这个问题。但是我还在寻找其他的方法。我不知道C。我知道它与Java非常相似。所以我认为它有私有和包私有的概念。太棒了!真的谢谢你!这就是我一直在等待的答案!