`
yangtsefisher
  • 浏览: 27424 次
  • 性别: 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. **单元测试**:为了...

    基于gcc的stm32环境搭建源码+文档说明.zip

    基于gcc的stm32环境搭建源码+文档说明.zip,个人经导师指导并认可通过的高分设计项目,评审分99分,代码完整确保可以运行,小白也可以亲自搞定,主要针对计算机相关专业的正在做毕业设计的学生和需要项目实战练习的学习者,可作为毕业设计、课程设计、期末大作业,代码资料完整,下载可用。 基于gcc的stm32环境搭建源码+文档说明.zip基于gcc的stm32环境搭建源码+文档说明.zip基于gcc的stm32环境搭建源码+文档说明.zip基于gcc的stm32环境搭建源码+文档说明.zip基于gcc的stm32环境搭建源码+文档说明.zip基于gcc的stm32环境搭建源码+文档说明.zip基于gcc的stm32环境搭建源码+文档说明.zip基于gcc的stm32环境搭建源码+文档说明.zip基于gcc的stm32环境搭建源码+文档说明.zip基于gcc的stm32环境搭建源码+文档说明.zip基于gcc的stm32环境搭建源码+文档说明.zip基于gcc的stm32环境搭建源码+文档说明.zip基于gcc的stm32环境搭建源码+文档说明.zip基于gcc的stm32环境搭建源码+文档说明.zip基于gcc的stm32环境搭建源码+文档说明.zip基于gcc的stm32环境搭建源码+文档说明.zip基于gcc的stm32环境搭建源码+文档说明.zip基于gcc的stm32环境搭建源码+文档说明.zip基于gcc的stm32环境搭建源码+文档说明.zip基于gcc的stm32环境搭建源码+文档说明.zip基于gcc的stm32环境搭建源码+文档说明.zip基于gcc的stm32环境搭建源码+文档说明.zip基于gcc的stm32环境搭建源码+文档说明.zip基于gcc的stm32环境搭建源码+文档说明.zip基于gcc的stm32环境搭建源码+文档说明.zip基于gcc的

    锂电池分选机:欧姆龙NJ501-1500与威伦通触摸屏驱动的先进工业自动化技术

    内容概要:本文详细介绍了欧姆龙NJ501-1500锂电池分选机的技术特点和工艺流程。该设备采用国际IEC 61131标准编程模式,具备伺服运动控制、高创直线电机DDR高速同步运动控制等功能,能进行电压测试、厚度测量等操作。设备配备雅马哈和ABB机械手,实现多轴协同作业,同时具备故障记录、产量统计及OEE功能,确保高效、精准的电池分选。此外,威伦通触摸屏提供的优质程序模板提升了编程效率。 适合人群:从事工业自动化领域的工程师和技术人员,尤其是关注锂电池生产和分选设备的专业人士。 使用场景及目标:适用于需要提升锂电池分选效率和质量的企业,旨在帮助技术人员理解和应用先进的工业自动化技术,提高生产线的自动化水平和管理水平。 其他说明:文中附有详细的PLC程序、触摸屏程序、变量地址分配表、IO分配表、雅马哈机械手程序、ABB六轴机器人程序及电气原理图等资料,便于深入研究和实施。

    毕业论文-超级图文最新资源包及上传位置说明-整站商业源码.zip

    毕业论文-超级图文最新资源包及上传位置说明-整站商业源码.zip

    毕业论文-【超人】积分商城 5.2.26-整站商业源码.zip

    毕业论文-【超人】积分商城 5.2.26-整站商业源码.zip

    免费0积分--gc10-det yolo格式

    免费0积分--gc10-det yolo格式

    Abaqus软件应用于管中管系统深水管非线性动力分析:基于Tube-to-tube ITT单元的数值模拟

    内容概要:本文深入探讨了Abaqus软件在管中管系统深水管非线性动力分析中的应用,特别是基于Tube-to-tube ITT单元的数值模拟研究。文章首先介绍了管中管系统的基本概念及其在深海石油、天然气开发中的重要性。接着阐述了Abaqus软件的功能特点及其在复杂工程问题中的优势。随后详细讲解了如何在Abaqus中建立管中管系统的模型,包括定义材料属性、设定几何尺寸、处理接触关系等。还讨论了设置分析步和载荷的方法,强调了非线性动力分析的必要性。最后展示了求解与结果分析的具体步骤,并提供了相关代码片段以辅助理解和操作。 适合人群:从事海洋工程、石油天然气开发等领域工作的工程师和技术人员,尤其关注深水管系统非线性动力分析的专业人士。 使用场景及目标:适用于需要深入了解并掌握Abaqus软件在管中管系统深水管非线性动力分析中的应用方法,旨在提升对这类复杂系统的认识水平,优化设计方案,确保工程安全可靠。 其他说明:文中提供的代码片段有助于读者更快上手实际操作,使理论与实践相结合,便于后续工作中灵活运用所学知识。

    【电子设计竞赛】单相用电器分析监测装置设计:实现电器类别与工作状态的实时识别了文档的核心内容

    内容概要:本文档是2017年全国大学生电子设计竞赛的试题,针对单相用电器分析监测装置的设计与制作提出了具体任务和要求。该装置需具备学习和分析监测两种模式,在学习模式下测试并存储电器特征参量,在分析监测模式下实时指示用电器类别和工作状态。基本要求包括电器电流范围、可识别的电器工作状态数、响应时间、最小电流电器的自制等。发挥部分则鼓励提高装置性能,如学习功能优化、增强识别能力、低功耗设计以及无线传输等功能。文档还详细规定了参赛注意事项,如参赛队伍组成、比赛时间安排、纪律要求等,并给出了评分标准,涵盖设计报告、基本要求完成情况及发挥部分的表现; 适合人群:参加全国大学生电子设计竞赛的本科生及高职高专学生,特别是对电子设计、单相用电器监测感兴趣的团队; 使用场景及目标:①作为竞赛指南,帮助参赛队伍明确设计目标和要求;②指导参赛队伍进行单相用电器分析监测装置的设计与制作,确保满足竞赛的基本要求和发挥部分的要求; 其他说明:文档强调了参赛纪律,要求参赛者必须是有正式学籍的全日制在校生,并且在竞赛期间只能在学校指定场地内进行设计制作,不得与他人交流。此外,文档还提供了详细的评分标准,以确保评审过程的公平性和透明度。

    GB/T-7714-2015学位论文zotero格式更改csl文件

    GB/T-7714-2015学位论文zotero格式更改csl文件

    毕业论文-春磊引导页-极乐二次修改-整站商业源码.zip

    毕业论文-春磊引导页-极乐二次修改-整站商业源码.zip

    大学生就业指导.pdf

    大学生就业指导.pdf

    FIDIA数控主轴伺服驱动调试手册.pdf

    FIDIA数控主轴伺服驱动调试手册.pdf

    毕业论文-MIP建站平台 1.2.2加密版-整站商业源码.zip

    毕业论文-MIP建站平台 1.2.2加密版-整站商业源码.zip

    IDC数据中心布局与动力规划.pdf

    IDC数据中心布局与动力规划.pdf

    毕业论文-H5手机转盘活动游戏页面源码-整站商业源码.zip

    毕业论文-H5手机转盘活动游戏页面源码-整站商业源码.zip

    Python语言特性详解:函数参数传递、类与实例变量、装饰器及单例模式等核心技术

    内容概要:本文档涵盖了Python编程语言的多个重要特性和概念,包括函数参数传递、元类、静态方法与类方法的区别、类变量与实例变量的关系、自省特性、字典推导式、单下划线和双下划线的意义、字符串格式化、迭代器和生成器、`*args`和`**kwargs`的使用、面向切面编程(AOP)与装饰器、鸭子类型、函数重载、新式类与旧式类的区别、`__new__`和`__init__`的区别、单例模式的实现、作用域规则、线程全局锁(GIL)、协程、闭包、lambda函数、函数式编程、拷贝的区别、垃圾回收机制、列表操作、`is`关键字、文件读取方法、Python2与Python3的区别等。此外,还包括了一些操作系统、数据库、网络、数据结构等方面的知识点。 适合人群:具备一定编程基础,特别是对Python语言有一定了解的研发人员,尤其是工作1-3年的开发者。 使用场景及目标:①帮助读者深入了解Python语言的核心特性和高级用法;②为开发者提供解决实际编程问题的具体方法和技术;③为准备面试的程序员提供参考,涵盖常见的面试知识点。 其他说明:文档不仅提供了理论知识,还附带了大量的代码示例,便于读者理解和实践。部分内容链接了外部资源,供读者进一步深入学习。文档内容广泛,既适合日常编程学习,也适合面试准备。

    毕业论文-qiyeseo-整站商业源码.zip

    毕业论文-qiyeseo-整站商业源码.zip

Global site tag (gtag.js) - Google Analytics