每当您需要知道接口背后的实际类型时,您可能选择了错误的点来介绍接口。这就是这里的样子。
在我看来,您想将执行逻辑(产生一些数据)的关注与记录结果的逻辑(在本例中为文本文件,但可能还有其他目标,对吗?)分开。为什么不为 ResultLogging 引入一个接口呢?
interface IResultLogger
{
void LogList(List<Something> data);
void LogDataTable(DataTable data);
}
并将此接口的实例传递给执行逻辑的所有方法?
如果您不想在这些方法中包含“日志记录”(调用 IResultLogger 接口),您可以添加另一个抽象:“ResultData”的概念。
abstract class ResultData
{
abstract public void LogToResultLogger();
//add methods to access the data in a way you might need for other things in your program
}
并派生一个“ListResultData”和“DataTableResultData”。
我在这里看不到工厂模式的价值。
另一种方法是拥有一个
class ListLogger
{
public void LogList(List<Something> data) {}
}
和
class DataTableLogger
{
public void LogDataTable(DataTable data) {}
}
做
void method1() and method2()
{
//do logic
new ListLogger().LogList(data);
}
void method3()
{
//do logic
new DataTableLogger().LogDataTable(data);
}