Java swing MVC与Android设计模式的比较

Java swing MVC与Android设计模式的比较,java,android,swing,design-patterns,model-view-controller,Java,Android,Swing,Design Patterns,Model View Controller,我正在对各种平台中的设计模式进行一项小型研究,我以前有使用Java编程的经验 在阅读这些帖子时:以及, 我想到了一个有趣的问题:为什么Java swing MVC不能与Android开发模式相比?或者为什么我们不能说Android遵循MVC?(在整体“外观和感觉”的上下文中) 在一个回答中,有人将MVC澄清为: 模型:要渲染的内容 查看:如何渲染 控制器:事件,用户输入 嗯。那么现在我的理解是: Java Swing MVC: 在JavaSwingMVC中,组件类是所有组件的抽象类

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

在阅读这些帖子时:以及,
我想到了一个有趣的问题:为什么Java swing MVC不能与Android开发模式相比?或者为什么我们不能说Android遵循MVC?(在整体“外观和感觉”的上下文中)

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

  • 模型:要渲染的内容

  • 查看:如何渲染

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

嗯。那么现在我的理解是:

Java Swing MVC:
  • 在JavaSwingMVC中,
    组件
    类是所有组件的抽象类 视觉环境中的属性。有一个独特的关键字叫做
    控件
    用于一些
    组件
    ,如按钮、列表等。 因此,所有控件和组件都是MVC中模型的一部分

  • 容器
    继承
    组件
    。有几个 定义布局和组件位置的布局管理器
    容器
    。还有
    监听器
    必须注册到 根据
    事件源
    。因此,它们都是MVC中的视图

  • 类,该类实现了将主 逻辑和每个事件都有一些
    eventclass
    。他们都是 MVC中控制器的一部分

把所有这些例子放在一个图像中;在swing MVC中,我们有:

Android设计模式(可视化为MVC):
  • 我认为
    小部件
    与这里的
    控件
    相同。还有一些 其他
    事件源
    。它们都充当模型

  • 视图
    包具有
    视图组
    (其中还包含几种
    布局
    )和
    侦听器接口
    。他们都是我们的一部分 在MVC中查看

  • 与swing MVC一样,我们可以说监听器接口方法和活动是 控制器的一部分

把所有的一切都放在一个图像中;在安卓系统中,我们有:

根据以上比较,我考虑以下<强>相似性<强>:

  • 容器
    -与
    视图相同

  • 布局管理器
    -与
    视图组

  • 侦听器
    -在两种体系结构中总体上相同

  • 控件
    -总体上与
    小部件相同

  • 事件委派
    (向事件源注册适当的监听器,然后实现监听器的方法)-在两种体系结构中总体上相同

那么,有谁能解释一下Android设计模式与Java swing MVC模式的不同之处吗?
或者,如果您认为两者是不同的(在用于开发的设计模式的上下文中),那么请解释为什么?

每个Swing JComponent都有一个负责显示组件的组件。虽然JComponent有一个paint方法,但只有用户派生的类直接使用它,而“标准”实现通常只是附加的UI。这允许非常容易地插入各种外观实现——不同的外观只提供不同的组件UI。很明显,组件是“模型”,UI是“视图”。Android并没有以非常明显的方式继承这种脱钩。例如,它的TextView看起来就像是一个类似的JLabel

然而,这不是使用MVC方法的唯一地方,对于其他一些特定情况,Android和Swing MVC非常相似。例如,Android
ListView
有一个模型(
ListAdapter
),非常像Swing
JList
有一个
ListModel
)。在这两种情况下,模型提供数据,而组件本身提供显示的可能性。可能的区别在于,Swing有更多的组件具有这种解耦的数据和表示<当Android不提供现成组件时,code>JTable和
JTree
具有类似的模型。根本没有树,是在Swing中调用的,与
JTable
不同

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

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


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

MVC的关键功能是在三个组件之间分离关注点:

  • 模型负责维护数据的内部表示
  • 景色很美