【问题标题】:Two possible types for a property属性的两种可能类型
【发布时间】:2011-01-14 13:42:37
【问题描述】:

我有一个类是复合模式中的一个叶子。这个类有一个属性,可以是 A 类型或 B 类型。它们唯一的公共接口是 Object 类型。

我应该如何支持这一点。

我可以

  1. 每种类型都有一个添加方法。然而,这意味着我应该有两个类型为 A 和 B 的属性,并且当我想要获得正确的属性时应该检查 null。

  2. 有一个对象类型的属性。这意味着当我获得该属性时,我必须检查它是哪种实例。

这类问题的最佳解决方案是什么?还是有更好的解决方案?

【问题讨论】:

    标签: oop properties composite


    【解决方案1】:

    我个人会选择单一的Object 属性方法。记录属性可能返回的对象类型,并让调用代码使用可用的语言特性来确定对象类型,并根据需要进行转换。实现两个属性有点重新发明您语言的“is-a”运算符,如果您需要添加更多可能的类型,很快就会变得难以管理。

    【讨论】:

      【解决方案2】:

      如果您使用支持类型抽象的语言(如 Java 中的泛型或 C++ 中的模板),您可以将该属性设置为泛型类型。如果没有,请使用 Object,每种类型都有一个方法只是一个丑陋的 hack(并且无法维护,如果您稍后添加更多类型)。

      【讨论】:

      • 我相信 OP 表明了泛型不适用的情况;例如不是每个处理对象的人都会提前知道它将包含什么类型的对象,并且您必须提前知道泛型参数才能使用该类型。
      猜你喜欢
      • 2012-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-28
      • 1970-01-01
      • 2018-12-08
      • 2017-03-27
      相关资源
      最近更新 更多