考虑有公司列表,我们可以添加新公司或编辑现有公司。使用表单执行添加和编辑。
要渲染这些表单,我需要两个类: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 :(得分:0)
听起来像你想要使用的成分。表单有一个FormPanel列表。
答案 1 :(得分:0)
首先,我将这些功能组合成Kaj建议的单一形式。这是一个管理Company对象列表的函数。这是典型用户的合理程度的粒度 - 管理,即从单一表单添加或编辑公司。
第二,就多重继承问题而言,你说你需要两种形式,添加,编辑。好吧,我不同意,但不管怎样,让我们继续。
你说“但它们有很多共同点(字段,按钮等),所以我概括了Form类”。我在这里质疑概括的基础。很多领域和按钮的共同点?哪些字段和按钮可以做,例如,DocumentEdit和CompanyEdit表单有什么共同之处?编辑按钮,其他什么?
现在,CompanyAdd和CompanyEdit是的,他们将有很多共同之处。这表明添加和编辑表单扩展了一些父特定的表单而不是这些抽象的添加/编辑基础。只需摆脱BaseFormAdd和BaseFormEdit。您在示例,文档表单和公司表单之间实际拥有多少常用功能?看起来像一个共同的基础添加或编辑表单添加很少的使用。你可以不用那个继承行。在多重继承方面,我只遇到一个有用的情况,我觉得我真的非常需要它。