2011-05-07 117 views
0

考虑有公司列表,我们可以添加新公司或编辑现有公司。使用表单执行添加和编辑。添加/编辑表单设计模式

为了呈现这些表单,我需要两个类: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 

OOPS!多重继承是不允许的。

我该怎么办?

更新:我听说需要多重继承意味着糟糕的设计。任何人都可以告诉我这种设计可以重新设计吗?

回答

0

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

0

首先,我将这些功能合并为一个单一的形式,正如Kaj所建议的那样。这是管理公司对象列表的功能。对于典型的用户管理来说,这是一个合理的粒度,即从一个表单添加或编辑公司。

其次就多重继承问题而言,你说你需要两种形式,添加,编辑。好吧,我不同意,但我们还是一起去吧。

你说“但他们有很多共同点(字段,按钮等),所以我推广了Form类”。我质疑这里泛化的基础。很多领域和按钮的共同点?例如,DocumentEdit和CompanyEdit表单有什么共同之处?编辑按钮,还有什么?

现在,CompanyAdd和CompanyEdit是的,他们会有很多共同点。这表明添加和编辑表单扩展了一些父级特定的表单,而不是这些抽象的添加/编辑基础。只需摆脱BaseFormAdd和BaseFormEdit。示例,文档表单和公司表单之间真正具有多少通用功能?看起来像一个常见的基础添加或编辑表单增加了很少的使用。你可以做到没有继承线。在多重继承方面,我只遇到了一种有用的情况,我觉得我真的很需要它。

+0

请将您的答案重新格式化,以便阅读。 – MByD 2011-05-08 11:19:40

+0

公司形式和文件形式有很多共同之处 - 窗口,表单面板,保存和取消按钮等。 – 2011-05-13 15:34:35

相关问题