这是什么样的模式('提供者')?

Inv*_*nda 3 c# design-patterns

在工作中,我们使用的是一种我在GoF书中没有找到的"模式"(但这可能是由于在这个问题上缺乏能力,我只是略去了模式)而且我仍然在怀疑.

比方说,如果我们有一个包含项目DataAccess的多项目解决方案,那么管理数据访问.然后通常我看到它有这样的结构:

Providers (Folder)
 - DataAccessProvider.cs

Interfaces (Folder)
 - IFileLoader.cs

Implementors (Folder)
 - FileLoader.cs
Run Code Online (Sandbox Code Playgroud)

这里是接口FileLoaderinternal实现,IFileLoader提供者看起来像这样:

public static class DataAccessProvider
{
  public static IFileLoader FileLoader
  {
    get { return new FileLoader(); }
  }
}
Run Code Online (Sandbox Code Playgroud)

这是什么样的设计模式(如果有的话),除了掩盖IFileLoader接口的具体实现之外,它的真正用途是什么?

其次,这真的是"好风格"吗?我想知道,例如,如果有很多电话会发生什么

string content = DataAccessProvider.FileLoader.LoadContentFromFile("abc.txt");
Run Code Online (Sandbox Code Playgroud)

new FileLoader()无论何时使用它都会调用.是不是有更优雅的方式来做类似的方法?

Sil*_*gel 7

在此示例中,它DataAccessProvider是简单工厂方法(模式)的示例.通常,您将拥有一个名为GetFileLoader()CreateFileLoader()代替Property版本的方法,但结果是相同的.

返回的目的IFileProvider,而不是FileProvider对依赖倒置,这样一个可以写其他类型的FileProvider和它们注入到应用程序,而不进行返工或重新编译所有依赖于一个对象的需要IFileProvider.这不是掩蔽.

如果关注FileLoader创建了多少个实例,那么可以使用Singleton模式用于该对象.但是,如果它FileLoader是一个轻量级对象,这通常不是问题,因为CLR垃圾收集器会自动为您处理.