0

我有这个困境,我需要在格里高利和儒略历的不同继承类型之间进行选择。我想要一个名为 Date 的类作为基类。我的问题如下:我应该有一个继承自日期类的公历类和继承自日期类的 Julian 类吗?还是应该只有 Gregorian 类从 Date 继承,而 Julian 应该从 Gregorian 继承,反之亦然?或者我应该在 Date 下面有一个从 Date 继承的类,并让 Gregorian 和 Julian 从该类继承?

        Date               Date              Date                     Date

 Gregorian  Julian        Gregorian         Julian                New class

                            Julian         Gregorian          Gregorian   Julian

我个人会选择两者都从 Date 继承的第一个替代方案,这是一个不错的选择。我能得到一些关于这个的意见吗?

4

3 回答 3

3

我不知道日历系统的内部细节,但我敢肯定很难不低估它们微妙的复杂性。仅此一项就让我绝对不想在类层次结构中混合实现。

我会去

  • 单独的类(类型)
  • 可选的非隐式转换
  • 策略/策略类中的共享实用程序,以避免不必要的代码重复

PS。在经典的“Liskov”意义上,您可以拥有一个抽象基类 Date ,它只是“命名”所有(大多数?)日历系统共有的概念。但是,我真的怀疑附加值会是什么。我可以看到它会导致很多混乱(它会邀请代码在任何或所有代码中混合 Date 的子类型,并且必须准备好使用您的 datetime 类的所有代码始终处理整个范围)。

顺便说一下,看看Noda TimeJoda Time。这些备受推崇的库通常被认为设计得特别好。

于 2011-09-28T20:05:22.680 回答
2

公历和儒略历是两种日历。他们从一个共同的基类继承比从彼此继承更好。

一个例子可以在 Joda time 中找到,它具有 Gregorian 和 Julian 年表作为与公共基本年表不同的子类。

在标准 Java 库中可以找到一个反例,其中公历和儒略历由同一类支持。

于 2011-09-28T20:05:55.457 回答
1

ACalendar不是 aDate所以没有必要继承自Date

至多, aCalendar应该对 进行操作Dates。或者也许 aDate可以将自己从一种转换为另一种。

您到底想做什么,为什么还没有在第三方库中完成?

于 2011-09-28T20:07:28.967 回答