【发布时间】:2015-10-11 04:32:03
【问题描述】:
我有一个包含许多 DisplayField 的应用程序(在画布上呈现),例如文本、布尔值、日期等。这些显示字段有许多共同的变量,例如颜色、阴影参数、填充等。
由于这些通用值,我将 BasicField 定义为抽象类。
从这个抽象类中,我扩展了 DisplayFieldText、DisplayFieldBoolean 等。每一个都是一个单独的类,带有特定于字段功能的附加变量。
现在我需要将所有 DisplayField 保存到磁盘。所以每个字段都需要保存它的核心(抽象类变量)以及它自己的参数。
如何在没有大量重复代码的情况下解决这个问题?
【问题讨论】:
-
标题不是关键字/标签的地方。标题应该以其他开发人员在实际检查问题之前可以了解问题的方式标记您的问题。您的标题非常模糊,我建议对其进行编辑以吸引了解确切问题的用户。我还建议使用更具体的标签,例如
design,以确保您的问题出现在使用这些特定标签查看问题的人面前 -
标题已更改
-
设计方面is
DisplayFieldTextaBasicField?对我来说,这听起来像是一种行为,应该是另一个对象的责任。听起来好像你应该有某种DisplayField类(具有显示行为),它接受BasicField类型。您当前的设计似乎违反了Single Responsibility Principle,您应该考虑到这一点重新设计。 -
对不起,如果我在这里添加了太多细节让人们感到困惑。问题是:有一个抽象类。从这个类扩展了许多其他类。抽象类具有所有扩展类共有的变量。扩展类有自己的私有变量。需要为每个扩展类保存所有变量,即抽象类变量以及扩展类变量。希望能澄清一点。
-
我(认为)理解了这个问题。您可以让抽象类实现
Serializable,然后通过ObjectOutputStream将对象(即实现Serializable的类的子类型)保存到您的驱动器。我是在通知您,您的设计违反了设计原则,这些原则是为了强制执行可扩展设计(以及使代码更易于管理),因此我发表评论但没有给出答案。我并不是要回答这个问题,而是要引导您做出更好的设计。
标签: java abstract-class