将Java swing MVC与Android设计模式进行比较

Kru*_*hah 9 java model-view-controller swing android design-patterns

我正在对各种平台的设计模式进行一项小型研究,并且我之前有过使用Java编程的经验.

在阅读这些文章:MVC模式在AndroidAndroid中MVC架构,
我想到一个有趣的问题:为什么的Java Swing MVC不能与Android开发模式进行比较?或者为什么我们不能说Android跟随MVC?(在整体"外观和感觉"的背景下).

在一个答案中,有人澄清MVC为:

  • 型号:渲染什么

  • 视图:如何渲染

  • 控制器:事件,用户输入

好.好吧,现在我理解的是:

Java Swing MVC:

  • 在Java swing MVC中,componentclass是可视化环境中所有属性的抽象类.有一个不同的关键字被称为 controls用于某些components如按钮,列表等.因此,所有控件和组件都是MVC 中Model的一部分.

  • Container继承component.有几个 LayoutManagers定义布局和地方componentscontainer.还Listeners必须注册EventSources.所以,它们都是MVC 中的View.

  • 实现Listener interface methods我们放置主逻辑的类,EventClasses每个事件都有一些.它们都是MVC 中Controller的一部分.

将所有这些例子放在图像中; 在摇摆MVC我们有:

摇摆mvc

Android设计模式(可视化为MVC):

  • 我想widgetscontrols这里一样.还有一些其他的EventSources.他们都充当模特.

  • View包有viewgroups(也包含几种 layouts.)和Listener interfaces.它们都是MVC 中View的一部分 .

  • 与swing MVC相同,我们可以说Listener interface methods,活动是控制器的一部分.

将所有图像放在一起; 在Android中我们有:

在此输入图像描述

根据以上比较,我考虑以下相似之处:

  • Container - 与...一样 View

  • Layout managers - 与...一样 ViewGroup

  • Listeners - 两种架构总体相同

  • controls - 整体相同 widgets

  • Event delegation (使用Event源注册适当的侦听器,然后实现Listener的方法) - 在两种架构中总体相同

那么,任何人都可以解释哪些因素使Android设计模式与Java swing MVC模式不同?
或者如果您认为两者都是不同的东西(在用于开发的设计模式的背景下),那么解释原因?

h22*_*h22 3

每个 Swing JComponent 都有ComponentUI负责显示组件。虽然 JComponent 有一个 Paint 方法,但只有用户派生类直接使用它 - “标准”实现通常只是调用附加 UI 的Paint 方法。这允许非常容易地插入各种外观和感觉实现 - 不同的外观和感觉只是提供不同的 ComponentUI。非常明显,组件是“模型”,UI 是“视图”。Android 并没有以非常明显的方式继承这种解耦。例如,当类似的 JLabel 具有UI时,它的 TextView 似乎只是绘制可绘制对象

然而,这并不是唯一使用 MVC 方法的地方,对于其他一些特定情况,Android 和 Swing MVC 非常相似。例如,AndroidListView有一个模型 ( ListAdapter) ,非常类似于 SwingJListListModel。在这两种情况下,模型提供数据,而组件本身提供显示的可能性。可能的区别在于 Swing 有更多具有此类解耦数据和表示的组件。当 Android 不提供开箱即用的此类组件时,JTable也有类似的模型。JTree根本没有树,而TableLayout是Swing中称为GridLayout的一个,不类似于JTable.

无效和重新绘制的一般方法没有太大不同,并且在这两个框架中,只有专用主线程可以接触组件。此外,事件侦听器(可能是其他“控制器”组)在 Java 和 Android 中非常相似,它们之间的所有差异可能只能称为“微妙”。

Swing 和 Android 之间的容器和布局管理器也非常相似,主要区别在于 Swing 的LayoutManager实现比 Android 的ViewGroup有更多可能的实现可供选择(像DatePicker这样的类虽然派生于ViewGroup,但不是通用布局管理器)。此外,Android 布局的一部分是用 XML 编码的,而 Swing 通常只是纯 Java。如果布局管理器也是响应调整大小或重新定向等事件的“控制器”,那么这部分的完成方式非常相似。但是我不确定布局管理器是否真的是“控制器”,因为它们更新的视图多于模型。

一般来说,Swing 似乎更适合在大屏幕上显示的大型、复杂的 GUI,而 Android 更适合只有几个可见组件的小屏幕,大到足以用手指操作而无需手写笔。