通过将多个TableModel提取到单个TableModelManager中来改进设计

时间:2013-03-06 09:14:33

标签: java swing design-patterns abstracttablemodel

我一直坚持设计的这个特定部分,我想要了解如何处理它。我的计划包括课程LeerTrajecten和元素Elementen。这两个对象都可以独立存在,但也可以将元素添加到课程中。 Element本身就是DocumentCasus等对象的抽象超类。

(1) 将一个元素添加到课程时,会创建一个课程元素LeerTrajectenElement,其中包含TrajectCodeElementCode,一个由前两个字段和一些其他数据组成的自己的唯一代码( DisplayNaamDisplayOmschrijving)。

在GUI(Spring)中,有一些专门用于管理这些课程和元素的标签(JTabbedPane)。每个选项卡都有一个概述和一个详细信息面板。在此概述中,JTable可显示每个现有ElementTraject

这仅仅是为了将程序放入透视图(LeerTrajectElement)并显示可能同时激活多个JTable但在不同选项卡上的方式。

(2) 我还有经理人,他们的唯一目的是管理他们各自的对象(LeerTrajectManager管理LeerTrajectElementManager管理Element等等。 Domeincontroller知道这些管理者,它们是整个域的一般外观。来自GUI的请求将发送到此DomeinController,该请求会将请求发送给正确的请求。

这是我的程序的基本概要,我将包括一些图表作为视觉辅助。

(1) enter image description here

(2)enter image description here

我希望我提供了有关项目当前设置的充分信息。 由于某种原因,我的模型没有正确显示,但DomeinController拥有3个管理员(它没有显示在概述中,但关联就在那里)。

如图2所示,每位经理都持有一个tableModel。 TableModels定义如下:

enter image description here

MyAbstractTableModel扩展AbstractTableModel并提供基本实现,因此特定实现可以从此类派生,同时仅提供非常基本的需求。

这是我们要点到的地方: 目前,每个经理都拥有自己的tableModel,而我们(老师)决定我们应该将其抽象为经理。我一直在为此实现一个实现,但我觉得我有一些有趣的错误:这些tableModel可以为几个不同的目的生成:要么你想要所有元素,要么你想要所有的元素链接到课程,或者您希望所有元素都链接到特定课程等等。

为了获得这样的东西,我尝试创建两个getTableModel方法。第一个只使用枚举{LEERTRAJECTELEMENTLEERTRAJECTELEMENT}作为参数,而第二个则使用额外的List<E>作为参数。这样做可以让我一般性地向请求添加数据,这些数据可以由相应的管理器先前收集(因此只将结果集数据发送到TableModelManager

这种方法最终为我的Switch中的每个方法提供了大量TableModelManager语句,以确定它应该发生什么以及应该使用什么tableModel。代码变得非常不洁净,所以我认为这可能不是我想要的方式。

至于为什么我们应该首先介绍一位经理:看起来我们的tableModels现在很难与我们各自的经理联系起来,我们应该尽量避免这种情况。

因此,总而言之:我有几位经理,他们都持有TableModel来显示他们各自的数据。我想通过将当前TableModel保存在TableModelManager中并通过此对象生成表模型来集中这一点。其他管理人员只需提及TableModelManager并告诉他数据已被更改或要求相应的模型。

我该如何处理?

PS:我意识到这更像是一个设计问题,所以如果我把它放在stackexchange网络上的另一个站点,请告诉我,我会删除它。

PPS:对于非英语部分我很抱歉,我的队友拒绝仅使用英语。

1 个答案:

答案 0 :(得分:1)

缺席详细分析,

  • 您可以通过让每个元素实现一个公共界面来实现strategy pattern,作为oul here来挽救您的enum方法。

  • 作为使用管理员的具体示例,此TestTable使用MyObjectManager的实例管理JTable中每行的一个单选按钮。

    < / LI>