在工作中,我们正在使用'模式'我在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");
。是不是有更优雅的方法来做类似的方法?
答案 0 :(得分:6)
在此示例中,DataAccessProvider
是简单工厂方法(模式)的示例。通常,您将使用名为GetFileLoader()
或CreateFileLoader()
的方法而不是Property版本,但结果是相同的。
返回IFileProvider
而不是FileProvider
的目的是用于依赖性倒置,这样可以编写其他类型的FileProvider
并将它们注入应用程序而无需返工或重新编译所有依赖于IFileProvider
的对象。这不是掩蔽。
如果关注创建了FileLoader
的实例数,那么就可以对该对象使用Singleton模式。但是,如果FileLoader
是一个轻量级对象,这通常不是问题,因为CLR垃圾收集器会自动为您处理。