代码之家  ›  专栏  ›  技术社区  ›  Halo

视图如何知道要创建什么组件?

  •  2
  • Halo  · 技术社区  · 15 年前

    我正在开发这个应用程序,你可以把文字和图画放在一个页面上。我的应用程序是mvc模式的,我需要所有的模型部分、文本和形状都是相同的概念。例如,它们都扩展了一个抽象的reportelement类。

    但问题是,我为页面中的每个形状创建了一个jpanel,但要处理文本,我需要使用jtextarea或其他东西。要呈现元素,视图直接从模型中获取报表元素列表并逐个绘制。如何在不损害mvc模式的情况下区分文本元素。

    我是说,这不可能,对吧?我不知道,有什么想法吗?

    2 回复  |  直到 12 年前
        1
  •  2
  •   halfer    12 年前

    我想你在找 Factory Pattern

    您需要有一个包装器方法,它返回 JComponent 基于你自己 ReportElement 条件。

        2
  •  2
  •   Joe Carnahan    15 年前

    我将通过构建一个工厂方法来处理这种情况,该方法为任何给定的 ReportElement ,像这样:

    public static JComponent buildViewForReportElement(ReportElement element)
    

    在这个方法中,您需要实际检查 报表元素 对象以查看要生成的组件类型。这种检查可能意味着检查每个对象上的字段或标志,甚至可能意味着使用 instanceof 区分 报表元素 彼此之间。

    注意检查 报表元素 这样的对象违反了面向对象编程的理念。 一个简单的“面向对象”解决方案需要 报表元素 对象具有 buildView() getView() 方法,这样您的gui代码就可以调用 GETVIEW() 在每一个 报表元素 却不知道 GETVIEW() 实际上是被打电话来的。

    不幸的是,面向对象的解决方案迫使您将视图代码与模型代码混合在一起,并且尝试将两者分开是很好的。这就是为什么我主张不使用gui构建代码 报表元素 对象,而不是使用工厂方法为任何给定的 报表元素 .