这是一种什么样的模式(';提供者';)
本文关键字:模式 提供者 一种 什么样 | 更新日期: 2023-09-27 18:26:22
在工作中,我们使用了一种我在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
是一个简单Factory方法(模式)的示例。通常情况下,您会有一个名为GetFileLoader()
或CreateFileLoader()
的方法,而不是Property版本,但结果是相同的。
返回IFileProvider
而不是FileProvider
的目的是用于依赖反转,通过这种方式,可以编写其他类型的FileProvider
并将其注入应用程序,而无需返工或重新编译所有依赖于IFileProvider
的对象。这与掩盖无关。
如果关心创建了多少FileLoader
实例,那么可以对该对象使用Singleton模式。但是,如果FileLoader
是轻量级对象,这通常不是问题,因为CLR垃圾收集器会自动为您处理这些问题。