如何处理工厂模式创建的对象

Ram*_*Ram 4 .net garbage-collection dispose design-patterns

我正在使用Factory模式来创建类的.NET对象.我还需要确保在应用程序终止之前应该处理所有这些对象.

我在哪里以及如何处理工厂模式创建的对象?我应该在我正在获取工厂创建的对象的类中进行处理吗?

Ste*_*ven 7

当您的工厂创建新IDisposable对象时,调用者通常应该处理这样的对象.一个可取的模式如下:

using (var instance = Factory.CreateInstance(someArg))
{
    // use the instance
}
Run Code Online (Sandbox Code Playgroud)

当您的工厂使用某个内部池时,仍然建议让调用者处理该对象,但在这种情况下,只要实例处理完,它就应该返回到池中.然而,这样的设计要复杂得多.

  • @Serg:如果你在你的界面添加一个`Close`方法,你也可以让这个接口继承`IDisposable`.我认为这甚至是一个更明智的事情,因为"IDisposable"的合同非常明确,它使消费者更容易确定性处理(因为他们可以使用`using`语句). (2认同)

Ger*_*nck 5

为什么要在应用程序终止之前处理它们?这是因为他们持有非托管资源吗?

如果是这种情况,只需实现 IDisposable 并在 Dispose 方法中执行清理工作,剩下的交给 .Net 处理。

  • .Net 会在应用程序结束后立即为您执行此操作。 (4认同)
  • .NET 永远不会为您调用 Dispose,因此如果您希望框架在应用程序结束时进行清理,那么实现 dispose 是没有用的。 (3认同)
  • 这个答案是不完整的。如果你只是实现 IDisposable.Dispose() 没有人会调用它(见[这个问题](/sf/ask/487697591/))除非你使用关键字`using` 或您的代码正在调用对象上的 .Dispose。您应该说应该实现终结器,以便垃圾收集器清除对象。 (2认同)