经常看到这样的代码:
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/