我经常看到这样的代码:

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/

10-08 22:03