这是一种什么样的模式(';提供者';)

本文关键字:模式 提供者 一种 什么样 | 更新日期: 2023-09-27 18:26:22

在工作中,我们使用了一种我在GoF书中没有真正找到的"模式"(但这可能是由于在这方面缺乏能力,我只是浏览了一下这些模式),我仍然有点怀疑。

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

Providers (Folder)
 - DataAccessProvider.cs
Interfaces (Folder)
 - IFileLoader.cs
Implementors (Folder)
 - FileLoader.cs

这里,FileLoader将是接口IFileLoaderinternal实现,提供程序如下所示:

public static class DataAccessProvider
{
  public static IFileLoader FileLoader
  {
    get { return new FileLoader(); }
  }
}

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

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

string content = DataAccessProvider.FileLoader.LoadContentFromFile("abc.txt");

无论何时使用,都会调用new FileLoader()。难道没有一种更优雅的方法来做类似的方法吗?

这是一种什么样的模式(';提供者';)

在本例中,DataAccessProvider是一个简单Factory方法(模式)的示例。通常情况下,您会有一个名为GetFileLoader()CreateFileLoader()的方法,而不是Property版本,但结果是相同的。

返回IFileProvider而不是FileProvider的目的是用于依赖反转,通过这种方式,可以编写其他类型的FileProvider并将其注入应用程序,而无需返工或重新编译所有依赖于IFileProvider的对象。这与掩盖无关。

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