【问题标题】:Add/edit form design pattern添加/编辑表单设计模式
【发布时间】:2011-05-07 16:40:56
【问题描述】:

假设有一个公司列表,我们可以添加新公司或编辑现有公司。使用表单进行添加和编辑。

要呈现这些表单,我需要两个类:AddForm 和 EditForm。 但是它们有很多共同点(字段、按钮等),所以我概括一下 Form 类:

class AddForm extends Form
class EditForm extends Form

然后我需要创建很多表单:用于公司、联系人、文档、用户等。所以我创建了一个包含三个基类的库:

abstract class BaseForm
abstract class BaseAddForm extends BaseForm
abstract class BaseEditForm extends BaseForm

现在我正在尝试为公司创建一个实现:

class CompanyForm extends BaseForm
class CompanyAddForm extends BaseAddForm, CompanyForm

哎呀!不允许多重继承。

我该怎么办?

更新:我听说需要多重继承意味着糟糕的设计。谁能告诉我如何改造这个设计?

【问题讨论】:

    标签: java oop design-patterns inheritance


    【解决方案1】:

    听起来像组合是你想要使用的。一个 Form 有一个 FormPanel 列表。

    【讨论】:

      【解决方案2】:

      首先,我会按照 Kaj 的建议将这些功能组合成一个单一的形式。这是管理公司对象列表的功能。对于典型用户(管理,即从单个表单添加或编辑公司)来说,这是一个合理的粒度。

      其次,就多重继承问题而言,您说您需要两个表单,添加、编辑。好吧,我不同意,但不管怎样,让我们​​继续吧。

      您说“但它们有很多共同点(字段、按钮等),所以我概括了 Form 类”。我在这里质疑泛化的基础。有很多共同的字段和按钮?哪些字段和按钮有什么共同之处,例如 DocumentEdit 和 CompanyEdit 表单?编辑按钮,还有什么?

      现在,CompanyAdd 和 CompanyEdit 是的,它们将有很多共同点。这表明添加和编辑表单扩展了某些父特定表单,而不是这些抽象的添加/编辑基础。只需摆脱 BaseFormAdd 和 BaseFormEdit。在文档表单和公司表单之间,您真正将拥有多少通用功能?看起来像一个普通的基本添加或编辑表单几乎没有什么用处。您可以不使用该继承线。在多重继承方面,我只遇到过有用的情况,以至于我觉得我真的很少需要它。

      【讨论】:

      • 公司表单和文档表单有很多共同点——窗口、表单面板、保存和取消按钮等。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-06
      • 2010-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多