`
yangtsefisher
  • 浏览: 26091 次
  • 性别: 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比较松散的形式来说,这个比较集中,也比较方便解耦感觉,不错。

相关推荐

    深入探讨SQL Server 2008 R2 -PowerPivot

    在 SharePoint 场中,PowerPivot for SharePoint 添加了服务器端应用程序和功能,支持对您发布PowerPivot指的是一组应用程序和服务,它们为使用Excel和SharePoint来创建和共享商业智能提供了端到端的解决方案。...

    PIVOT2.pdf

    目的: 对每个探针来说, 都有自身的一个参考架(物体坐标系), 但是在导航系统中, 通过反 光球可以识别到的是: 探针的坐标中心位置(3 个自由度, xyz 位置)以及姿态(3 个自 由度, 旋转关系), 但并不给出探针针尖的坐标...

    Excel Power Pivot 视频教程 数据建模及DAX函数

    零基础到高级应用系统化讲解Power Pivot课程,涉及常规透视表与数据模型透视表的区别,导入数据等基础应用,以及更多DAX基础语法及拓展高级应用,设置度量值,理解查询上下文,筛选上下文,行上下文之间的关系。

    搜集的Pivot例子

    搜集的Pivot例子,主要就两个例子以及官方的说明资料。

    IV Pivot Editor

    Easily set your pivot points inside Unity. Unlike the other pivot editor solutions on the asset store you can set the pivot point using scene handles, snap the pivot to mesh vertices. Features: • ...

    PowerPivot 入门手册_giantu54_PowerPivot_

    PowerPivot 入门手册

    pivot_130_beta2_full_thumb3hr_pivot_php_

    pivot 130 beta2 full version download

    pivot4 火柴人动画制作软件

    pivot4,最新的pivot,是一款简单易上手的火柴人动画软件,相对以往的pivot3来说,增加了许多新的功能

    Gauss_pivot.zip_pivot_数值分析pivot

    高斯迭代解方程 数值分析 西安交通大学 作业

    Excel Power Pivot 视频课程 数据建模及DAX函数

    零基础到高级应用系统化讲解Power Pivot课程,涉及常规透视表与数据模型透视表的区别,导入数据等基础应用,以及更多DAX基础语法及拓展高级应用,设置度量值,理解查询上下文,筛选上下文,行上下文之间的关系。

    Pivot3.1英文版

    Pivot3。1 轻松制作火柴人 制作火柴人的首选工具 不得不看 不看后悔

    SQL Server 关于Pivot详解

    很多书籍包括教材介绍pivot语句不详细,难以理解其查询结果,这样势必会造成使用该语句时有困难,本文理论讲解透彻,结合例题分析,最后给出实验题目让你练手,以尽快掌握其使用。

    pivot与unpivot函数

    pivot 与 unpivot 函数是SQL05新提供的2个函数 灰常灰常的实用

    JIDE Pivot Grid(数据透视表格) 开发员技术手册

    杰笛数据透视表格利用Java/Swing实现了在Microsoft Excel里面非常著名的数据透视表(PivotTable)功能。这个功能也在很多数据分析和OLAP应用程序里出现过。数据透视表的特点就是帮助您从一堆看似杂乱的数据里找到您...

    asp.net 实现Pivot表

    asp.net 实现Pivot表,可以实现表的行汇总统计与行列转换。

    微软Excel 2013:用PowerPivot 建立数据模型

    相反,《微软Excel 2013:用PowerPivot 建立数据模型》承载了大量信息,这样一旦学完《微软Excel 2013:用PowerPivot 建立数据模型》 你在Excel新的建模选项中将有足够的背景知识。用最后一句话来强调这本书的主要...

    Pivot unity script

    Pivot unity script using for change pivot in unity editor

    pivot火柴人制作工具

    pivot火柴人制作工具,可以简单制作火柴人动画flash和图片,对新手来说比flash更方便

    PowerPivot的数据分析

    PowerPivot for the date analyst:microsoft Excel 2010

Global site tag (gtag.js) - Google Analytics