Kru*_*hah 9 java model-view-controller swing android design-patterns
我正在对各种平台的设计模式进行一项小型研究,并且我之前有过使用Java编程的经验.
在阅读这些文章:MVC模式在Android和Android中MVC架构,
我想到一个有趣的问题:为什么的Java Swing MVC不能与Android开发模式进行比较?或者为什么我们不能说Android跟随MVC?(在整体"外观和感觉"的背景下).
在一个答案中,有人澄清MVC为:
型号:渲染什么
视图:如何渲染
控制器:事件,用户输入
好.好吧,现在我理解的是:
在Java swing MVC中,component
class是可视化环境中所有属性的抽象类.有一个不同的关键字被称为
controls
用于某些components
如按钮,列表等.因此,所有控件和组件都是MVC 中Model的一部分.
Container
继承component
.有几个
LayoutManagers
定义布局和地方components
在
container
.还Listeners
必须注册EventSources
.所以,它们都是MVC 中的View.
实现Listener interface methods
我们放置主逻辑的类,EventClasses
每个事件都有一些.它们都是MVC 中Controller的一部分.
将所有这些例子放在图像中; 在摇摆MVC我们有:
我想widgets
和controls
这里一样.还有一些其他的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模式不同?
或者如果您认为两者都是不同的东西(在用于开发的设计模式的背景下),那么解释原因?
每个 Swing JComponent 都有ComponentUI负责显示组件。虽然 JComponent 有一个 Paint 方法,但只有用户派生类直接使用它 - “标准”实现通常只是调用附加 UI 的Paint 方法。这允许非常容易地插入各种外观和感觉实现 - 不同的外观和感觉只是提供不同的 ComponentUI。非常明显,组件是“模型”,UI 是“视图”。Android 并没有以非常明显的方式继承这种解耦。例如,当类似的 JLabel 具有UI时,它的 TextView 似乎只是绘制可绘制对象。
然而,这并不是唯一使用 MVC 方法的地方,对于其他一些特定情况,Android 和 Swing MVC 非常相似。例如,AndroidListView
有一个模型 ( ListAdapter
) ,非常类似于 SwingJList
的ListModel
。在这两种情况下,模型提供数据,而组件本身提供显示的可能性。可能的区别在于 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 更适合只有几个可见组件的小屏幕,大到足以用手指操作而无需手写笔。