`
yangtsefisher
  • 浏览: 27117 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

MVC在Web中的设计模式以及应用在Pivot GUI中的一点区别

    博客分类:
  • Java
阅读更多

MVC

MVC中的设计模式
一个以MVC为架构的系统包含了很多的设计模式,但是与MVC最为密切相关的是下面三种模式:Observer, Composite和Strategy。

1. Observer模式
MVC通过使用定购/通知的方式分离了Model和View。View要保证自己显示能正确地反映出Model的内容和状态。一旦Model的内容发生变化,必须有一个机制来使得Model能够通知相关的View,使得相关的View可以在适当的时机刷新数据。这个设计还可以解决更一般的问题,将对象分离,使得一个对象的改变能够影响到另一些对象,而这个对象并不知道那些被影响的对象的细节。这就是被描述为Observer的设计模式。

2. Composite模式
MVC的一个重要特征就是View可以嵌套。嵌套的组合视图可用于任何视图可用的地方,而且可以管理嵌套视图。这种思想反映出将组合的视图与其组件平等对待的设计。这种设计思想在面向对象领域内被描述成为Composite的设计模式。
模式类型:Composite模式是对象型模式,同时它也是结构型模式。

3. Strategy模式
MVC的另一重要特征是可以在不改变View的情况下改变View对用户输入的响应方式。这对一个经常需要变更响应逻辑的系统来说是非常重要的。MVC把响应逻辑封装在Controller中。有一个Controller的类层次结构,可以方便地对原有Controller做适当改变,创建新的 Controller。View使用Controller子类的实例来实现一个特定的响应策略。要实现不同的响应策略,只要用不同种类的 Controller实例替换即可。还可以在运行时刻通过改变View的Controller来改变View对用户输入的响应策略。这种View- Controller的关系是被描述为Strategy的设计模式的一个例子。

 

其中说到Compoite模式,View可以嵌套,但是在Pivot中的应用Composite模式的却是Component,而这个Component却是Controller.下面是Pivot贡献者 Greg Brown在邮件列表中的说明:

 

"Components represent the "controller" in Pivot's MVC implementation, and skins represent the "view". A skin defines the overall L&F of a component, but it doesn't define how the component's content is painted. That's where renderers come in. However, based on my understanding of your app's requirements, I'm not sure you would need to support a renderer (not all skins do).

Decorators are used to augment a component's default paint behavior. They allow a caller to hook into the paint process before and after a component is painted. Skins often take advantage of them, but they don't necessarily have to. In other words, there's no need to use a decorator if you can implement the behavior you need within the skin's paint() met
hod."

 

Pivot中的View是Skin,不是嵌套的,Component的子类Container才是。

还有一个细节,上面提到说 skin负责 L&F ,但事实上在Pivot中真正负责L&F的是Visual接口,包括Component,也包括Skin.

说Skin负责L&F,是因为Component的paint方法都交给Skin代理了,那么就会问一个问题,是否Container所有的children components也是在Container的Skin中做的?这样未免太麻烦了,Container的Skin还得到Container中去找children components, component的paint又由comp的Skin负责。。。

 

所以Pivot的处理时,ContainerSkin只负责Container自己的,不负责Container的子,Container的子都在它的paint方法中做。所以Container的paint方法覆盖了Component的paint,两者有区别。

 

总结之, Container和Component的机制稍微不一样,普通Comp由Skin代理,容器Container由Skin+遍历子(skin+layout)实现。Pivot用户不需要关心这个区别,也不用注意Composite,只需要在Skin中定义L&F就行了。

分享到:
评论
1 楼 yangtsefisher 2010-10-15  
Components represent the "controller" in Pivot's MVC implementation.

原来Components起的是Controller的作用,Swing中好像也是这样的,到今天才理解。

Pivot2.0还有个比较有意思的东西MessageBus(消息总线),相对于Components比较松散的形式来说,这个比较集中,也比较方便解耦感觉,不错。

相关推荐

    swing 新应用

    4. **模型-视图-控制器(MVC)**:Swing遵循MVC设计模式,组件的逻辑与表示分离,使得代码更加模块化,易于维护和扩展。 5. **国际化与本地化**:Swing支持多语言环境,开发者可以通过资源包(Resource Bundle)...

    Java Swing桌面开发经典案例

    5. **模型-视图-控制器(MVC)**: Swing遵循MVC设计模式,使得代码结构清晰,易于维护。例如,JTable和JList组件支持TableModel,允许开发者分离数据模型与视图。 6. **可定制组件**: Swing提供了JTable、JTree和...

    2021-2022计算机二级等级考试试题及答案No.2689.docx

    9. MVC模式:MVC(Model-View-Controller)模式中,控制器(Controller)是核心,负责协调模型和视图。正确答案是B。 10. 约束类型:列级约束针对单个列,而表级约束可以涉及多个列。不正确的描述是C,因为它提到...

    smartcalendar:一个允许非平凡操作的简单日历应用程序

    6. **设计模式**:在开发过程中,开发者可能应用了各种设计模式,如单例模式(用于创建全局访问的日历实例)、观察者模式(用于实时更新界面)或者工厂模式(用于创建不同类型的日期对象)。 7. **单元测试**:为了...

    【WSN集群】基于matlab遗传算法GA和细菌算法BC移动无线传感器集群仿真【含Matlab源码 10020期】.mp4

    海神之光上传的视频是由对应的完整代码运行得来的,完整代码皆可运行,亲测可用,适合小白; 1、从视频里可见完整代码的内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作

    【雷达检测】基于matlab雷达信号检测(杂波对消 动目标检测 横虚警算法)【含Matlab源码 9744期】.mp4

    海神之光上传的视频是由对应的完整代码运行得来的,完整代码皆可运行,亲测可用,适合小白; 1、从视频里可见完整代码的内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作

    6kw单相光伏并网逆变器:基于两级式拓扑结构与多控制策略的PLECS仿真模型,6kw单相光伏并网逆变器:两级式拓扑结构与多控制策略的PO-PR-SPWM仿真模型,6kw单相光伏并网逆变器plecs仿真

    6kw单相光伏并网逆变器:基于两级式拓扑结构与多控制策略的PLECS仿真模型,6kw单相光伏并网逆变器:两级式拓扑结构与多控制策略的PO-PR-SPWM仿真模型,6kw单相光伏并网逆变器plecs仿真模型 1)拓扑结构:两级式并网,前级为两路boost交错升压电路,后级为H4 Heric H6逆变电路(3种逆变电路可选)+Lcl滤波电路; 2)控制方式 光伏电池采用【PO扰动观察法】mppt算法, Boost采用电压、电流双闭环控制,电压环采用PI控制;电流环采用PI控制 逆变采用电压,电流双闭环控制,电压环采用PI控制+陷波器抑制母线二次纹波的影响,电流环采用PR控制,同时加入电网电压前馈控制,有效抑制电网电压波动的影响;加入有源阻尼抑制LCl谐振尖峰。 调制策略采用【单 双极性可选】SPWM方法; 电网锁相采用sogl-pll锁相环,并网电流和电网电压完美同相; 同时加入功率因素可调功能,支持无功输出。 仿真结果如下: 【01】光伏电池 输出电压、电流、功率 曲线 【02】并网电压、并网电流 波形 【03】直流母线电压 参考值

    (源码)基于Arduino的PT6311液晶显示控制器_1.zip

    # 基于Arduino的PT6311液晶显示控制器 ## 项目简介 本项目基于Arduino平台,专注于控制PT6311字符型液晶显示模块,可驱动VFD(真空荧光显示器)进行显示,适用于需要液晶显示的智能硬件开发,如智能仪表、电子设备等。 ## 项目的主要特性和功能 1. 支持PT6311字符型液晶显示模块及VFD显示。 2. 具备字符转换功能,可将字符转为二进制格式用于硬件显示。 3. 实现显示模块初始化、清空屏幕、设置光标位置、打印文本等基本功能。 4. 支持文本正向和反向滚动显示。 5. 有简单字符串截取机制,保证显示内容在限制长度内。 6. 通过process函数实现数据传输和显示控制,利用位操作和延迟控制时钟和数据线状态。 ## 安装使用步骤 1. 已下载项目源码文件后,将其解压。 2. 把代码导入Arduino开发环境。 3. 连接PT6311液晶显示模块到Arduino板,确保数据线、时钟线、选通线等连接无误。

    【振动】基于matlab GUI单自由度振动响应分析【含Matlab源码 13056期】.zip

    Matlab领域上传的视频是由对应的完整代码运行得来的,完整代码皆可运行,亲测可用,适合小白; 1、从视频里可见完整代码的内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作

    【车间调度】基于matlab黏菌算法SMA求解分布式置换流水车间调度DPFSP【含Matlab源码 6162期】.mp4

    海神之光上传的视频是由对应的完整代码运行得来的,完整代码皆可运行,亲测可用,适合小白; 1、从视频里可见完整代码的内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作

    2024年全国地区工程审计经理职位薪酬调查报告

    人力资源+大数据+薪酬报告+涨薪调薪,在学习、工作生活中,越来越多的事务都会使用到报告,通常情况下,报告的内容含量大、篇幅较长。那么什么样的薪酬报告才是有效的呢?以下是小编精心整理的调薪申请报告,欢迎大家分享。相信老板看到这样的报告,一定会考虑涨薪的哦。

    基于Python的Django-vue商品销售平台实现源码-演示视频.zip

    基于Python的Django-vue商品销售平台实现源码-演示视频 项目关键技术 开发工具:Pycharm 编程语言: python 数据库: MySQL5.7+ 后端技术:Django 前端技术:HTML 关键技术:HTML、MYSQL、Python 数据库工具:Navicat、SQLyog

    【毫米波雷达】基于matlab TDMA-MIMO毫米波雷达原始数据生成和信号处理【含Matlab源码 9811期】.mp4

    海神之光上传的视频是由对应的完整代码运行得来的,完整代码皆可运行,亲测可用,适合小白; 1、从视频里可见完整代码的内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作

    【车间调度】基于matlab金枪鱼算法TSO求解分布式置换流水车间调度DPFSP【含Matlab源码 6154期】.mp4

    海神之光上传的视频是由对应的完整代码运行得来的,完整代码皆可运行,亲测可用,适合小白; 1、从视频里可见完整代码的内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作

    黑翅鸢优化算法Matlab

    黑翅鸢优化算法(Black-winged Kite Algorithm, BKA) 是一种2024年提出的新型自然启发式元启发算法,灵感源自黑翅鸢的狩猎行为与迁徙模式,适用于复杂优化问题的求解。

    【路径规划】基于matlab GUI RRT和PRM路径规划(起始点可设置)【含Matlab源码 13057期】.zip

    Matlab领域上传的视频是由对应的完整代码运行得来的,完整代码皆可运行,亲测可用,适合小白; 1、从视频里可见完整代码的内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作

    chromedriver-mac-arm64-135.0.7049.3.zip

    chromedriver-mac-arm64-135.0.7049.3.zip

    ImageJ分析SEM图像

    ImageJ分析SEM图像

    串口助手,可以调整串口接收数据大小,颜色文字。显示接收时间。

    串口助手

    vue 1234567890

    vue 1234567890

Global site tag (gtag.js) - Google Analytics