扩展Java类还是提供静态帮助类?

时间:2011-05-05 18:22:01

标签: java design-patterns static

例如:我必须在我的项目中使用日期类,但我需要一些简单的方法来向Date添加分钟等。我应该:

  • 使用public static Date addToDate(Date date, int timeToAdd)等方法创建一个静态类
  • 创建一个扩展日期的MyDate类,并提供public Date add(int duration)

    等方法

    当我研究这个问题时,我对一般情况下更好的方法感兴趣,特别是关于标准库中的类。

  • 5 个答案:

    答案 0 :(得分:5)

    我会选择第一种方法。我讨厌一些OOP退化的事情之一是,有时无用的类会激增 - 通常它是一个完美主义的奇思妙想,它带来了奇怪类的升级,其中有两种方法而且没有什么真正重要的,这带来了一堆无用的代码

    只需创建一个DateUtils类,并始终检查Java Runtime是否已提供类似的内容。

    答案 1 :(得分:2)

    人们经常建议使用构图而不是继承。无论如何,有些情况下继承更合适。 你说过:

      

    我需要一些简单的方法来向Date等添加分钟。

    如果你真的需要简单的方法,并且不需要额外的字段来存储其他属性,那么按照@Giacomo方法,使用他建议的类DateUtils,使用可以执行所需操作的静态方法。

    如果需要将其他数据存储到Date对象,请考虑使用类来执行此操作。如果是这种情况,我不同意@thasc,因为即使通常使用组合而不是继承可能是一个好习惯,创建Date类的扩展版本允许您直接在需要Date参数的方法中使用ExtendedDateObject。

    答案 2 :(得分:1)

    继承Date是一件麻烦事。 java.util.Date,java.util.Timestamp,java.sql.Date存在足够的混淆,而不会增加您自己的子类的复杂性。绝对采用静态方法方法。

    请注意,您可能需要的某些功能可能已在commons-lang中实施。如果您的教师允许,那么您可能最好使用该库而不是遵循问题中的任何一个选项。

    答案 3 :(得分:0)

    我会选择第二种选择,原因如下

    • 我认为更多的课程是一个不那么重要的问题,而对于太多的静态方法。从哪里开始到哪里停止? 3种方法是否足以创建子类?

    你可以说出来......像DateWithMinuteHandling一样,使命名混淆的可能性降低

    答案 4 :(得分:-1)

    考虑使用Joda-Time库进行日期/时间操作。