对象工厂实现

发布于 2024-09-16 15:13:23 字数 160 浏览 1 评论 0原文

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

PS 我不喜欢涉及任何反射,只使用简单的 OOP 方法。

I`m want to create an object factory in C#. I want my objects to be created only via this object factory, how to achieve this? I know how to make a simple object factory, like satic class with public methods that are creating and initializing my objects. But I need to make sure people can only create object instances via object factory, any ideas?

P.S. I don`t like to involve any reflection, just use plain OOP approach.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

旧街凉风 2024-09-23 15:13:23

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

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

Create a public interface called Widget. Then create a class called WidgetFactory with a method called newWidget(); which returns Widget. Define an additional class inside of WidgetFactory "WidgetImpl", that implements the Widget interface. This will not be accessible outside of the WidgetFactory. Implement newWidget() by creating and returning a new instance of WidgetImpl.

In other words, use an interface in conjunction with a class-scoped implementation to hide the implementation.

寻梦旅人 2024-09-23 15:13:23

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

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

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

You would have to somehow hide the implementation of the class you want the factory to create so that the only method available is to use the factory. Otherwise you cannot stop people directly creating instances of the class. Another technique would be to hide the constructors of the class if you cannot hide the class itself. Most commonly this is done (in java) through the use of private and package private classes and methods.

But consider this, it is not uncommon for a developer to need access to the class. A good example might be in unit test.

So if you cannot fully hide it, consider how you might be able to "discourage" developers from directly instantiating it, but still have it available for those times they might need to not use the factory.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文