代码之家  ›  专栏  ›  技术社区  ›  James McMahon

在类层次结构的中间有空类是不是很难闻?

  •  5
  • James McMahon  · 技术社区  · 15 年前

    我有时会以一个类层次结构结束,在这个层次结构中,我有一个具有一些公共功能的抽象基类和两个实现类,这些实现类分为两个(很少更多)组,我希望在某些情况下用不同的方式处理。一个例子是抽象树节点类和不同的分支和叶实现,我想在其中区分分支和叶。

    然后,这些中间类只用于流控制中的“is-a”语句,它们不包含任何代码,尽管我曾经遇到过一些情况,在这些情况下,它们“增长”了一些代码。

    你觉得这有味道吗?在我的树示例中,另一种选择是添加 isLeaf() / isBranch() 将方法抽象到基类,并在中间类上实现这些方法,但这对我来说似乎没有什么好处,真的,除非我打算同时拥有多个类。

    6 回复  |  直到 15 年前
        1
  •  1
  •   KLE rslite    15 年前

    通常,空类是一种代码味道。

    我同意你的观点。 isLeaf isBranch 添加有关对象的信息 ,这很有帮助。 (这是因为,在超级类中,您不能表示子类是“叶或分支”)。


    这个 结果相反的两种方法也可以被认为是代码复制 .

    你只能用一个…但我建议返回枚举值叶或分支。

        2
  •  4
  •   Ber    15 年前

    对我来说,在流控制中使用“is-a”测试和使用开关/案例一样难闻。在一个好的OO设计中,两者都不需要。

        3
  •  2
  •   parkr    15 年前

    是的,深度继承层次结构无论如何都是一种代码味道。

        4
  •  2
  •   Jon Limjap    15 年前

    是的,绝对是一种代码味道——除非您准备好将代码写入这些空类,否则不要对它们进行编码。想想雅格尼(你不需要它)——除非你已经需要它,否则不要去做。

    此外,您是否考虑过这样的情况:这些类只用于提供抽象方法,或者根据方法或属性的能力对它们进行分组?

    如果是这样的话,也许您真正需要的是接口,而不是额外的抽象类?

        5
  •  0
  •   Quagmire    15 年前

    一个不包含任何代码的类绝对是一种代码味道……

        6
  •  0
  •   Community CDub    7 年前

    我觉得没问题,如果你以后要加入新功能的话。

    但如果不是,则通常在这里使用枚举。

    --编辑

    尽管我必须同意 Ber 总之,您不应该使用“is-a”。