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

时间:2014-10-14 07:13:36

标签: c# design-patterns

在工作中,我们正在使用'模式'我在GoF书中找不到(但这可能是由于在这个问题上缺乏能力,我只是略去了模式)而且我还是有点怀疑。

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

Providers (Folder)
 - DataAccessProvider.cs

Interfaces (Folder)
 - IFileLoader.cs

Implementors (Folder)
 - FileLoader.cs

此处,FileLoader将是接口internal的{​​{1}}实现,提供程序如下所示:

IFileLoader

这是什么样的设计模式(如果有的话),除了掩盖public static class DataAccessProvider { public static IFileLoader FileLoader { get { return new FileLoader(); } } } 接口的具体实现之外,它的真正用途是什么?

其次,这真的是一个很好的风格'?我想知道,例如,如果有很多电话,如

会发生什么
IFileLoader

无论何时使用,都会调用string content = DataAccessProvider.FileLoader.LoadContentFromFile("abc.txt"); 。是不是有更优雅的方法来做类似的方法?

1 个答案:

答案 0 :(得分:6)

在此示例中,DataAccessProvider是简单工厂方法(模式)的示例。通常,您将使用名为GetFileLoader()CreateFileLoader()的方法而不是Property版本,但结果是相同的。

返回IFileProvider而不是FileProvider的目的是用于依赖性倒置,这样可以编写其他类型的FileProvider并将它们注入应用程序而无需返工或重新编译所有依赖于IFileProvider的对象。这不是掩蔽。

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