1

我经常看到这样的代码:

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从它继承我就无法使用,我必须继承该类只是为了指定参数,而且我的工作速度比放那个慢通过构造函数传递参数。

但是我找不到这个反模式的名字。

有人知道吗?

4

2 回答 2

6

是的,这是一种反模式。抽象类已经规定了派生类的工作方式,这里的类层次结构比单个类没有优势。

如果抽象类改为调用纯虚函数来获取StreamReader,那将是有意义的。然后不同的派生类可以附加到文件、网络流或动态生成的数据。

这里的反模式是“违反开闭原则”(SOLID 的第二部分)。

于 2012-06-20T15:37:02.073 回答
0

是/否。

对我来说,这看起来像是一种抽象 setter 注入的尝试,我不确定这是一个好主意。它使事情变得不清楚并导致发布代码,但 setter 注入本身并不是反模式。

于 2012-06-20T15:45:48.360 回答