我经常看到这样的代码:
public abstract class AbstractDataReader
{
public void Read()
{
var reader = new StreamReader(FileName);
........
}
protected abstract string FileName
{
get;
}
}
public class DataReader : AbstractDataReader
{
protected override string FileName
{
get { return "data.txt"; }
}
}
对于我来说,它看起来像是反模式,因为DataReader类没有逻辑,我不能在不继承它的情况下使用
AbstractDataReader
,这也很奇怪,我必须继承该类只是为了指定参数,而且我的工作还慢一些只需将这些参数放入构造函数即可。但是我找不到此反模式的名称。
有人知道吗?
最佳答案
是的,这是一种反模式。抽象类已经规定了派生类的工作方式,与单个类相比,类层次结构没有任何优势。
如果抽象类改为调用纯虚函数来获取StreamReader
,则将是有意义的。然后,可以将不同的派生类附加到文件,网络流或动态生成的数据。
这里的反模式是“违反开闭原理”(SOLID的第二部分)。
关于c# - 是反模式吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11122751/