这是什么样的模式(’提供者’)?
在工作中,我们使用的是一种我在GoF书中没有找到的“模式”(但这可能是由于在这个问题上缺乏能力,我只是略去了模式)而且我仍然怀疑。
比方说,如果我们有一个包含项目DataAccess的多项目解决方案,那么管理数据访问。 然后通常我看到它有这样的结构:
Providers (Folder) - DataAccessProvider.cs Interfaces (Folder) - IFileLoader.cs Implementors (Folder) - FileLoader.cs
这里, FileLoader
将是接口IFileLoader
的internal
实现,提供者看起来像这样:
public static class DataAccessProvider { public static IFileLoader FileLoader { get { return new FileLoader(); } } }
这是什么样的设计模式(如果有的话),除了屏蔽IFileLoader
接口的具体实现之外,它的真正用途是什么?
其次,这真的是“好风格”吗? 我想知道,例如,如果有很多电话会发生什么
string content = DataAccessProvider.FileLoader.LoadContentFromFile("abc.txt");
无论何时使用,都会调用new FileLoader()
。 是不是有更优雅的方式来做类似的方法?
在此示例中, DataAccessProvider
是简单工厂方法(模式)的示例。 通常你会有一个名为GetFileLoader()
或CreateFileLoader()
而不是Property版本,但结果是一样的。
返回IFileProvider
而不是FileProvider
的目的是用于依赖性反转,这样就可以编写其他类型的FileProvider
并将它们注入应用程序,而无需返工或重新编译依赖于IFileProvider
所有对象。 这不是掩盖。
如果关注创建了多少个FileLoader
实例,那么就可以对该对象使用Singleton模式。 但是,如果FileLoader
是一个轻量级对象,这通常不是问题,因为CLR垃圾收集器会自动为您处理。