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

相关推荐

    asp.net 实现Pivot表

    在ASP.NET框架下,我们可以利用多种技术来实现Pivot表的功能,以便在Web应用中展示数据的聚合和转换结果。本篇文章将深入探讨如何在ASP.NET中实现Pivot表,以及它在行汇总统计和行列转换中的应用。 首先,ASP.NET是...

    搜集的Pivot例子

    7. Pivot工具:在各种数据分析软件和编程环境中都有Pivot工具,如Excel的PivotTable,Python的Pandas库中的pivot函数,以及Tableau、Power BI等商业智能工具中的Pivot功能。 综上所述,这个“搜集的Pivot例子”...

    PowerPivot 入门手册_giantu54_PowerPivot_

    PowerPivot是一款由Microsoft开发的强大数据分析工具,它整合在Excel和SharePoint中,为用户提供了高级的数据分析和建模功能。作为一个入门手册,本书将帮助初学者理解和掌握PowerPivot的核心概念和操作,从而在日常...

    PowerPivot的数据分析

    用户在PowerPivot中构建PivotTables(数据透视表)的步骤以及如何进行格式化,使其不像普通的Excel报表一样,也是本书的重要内容。书中的技巧部分专门讲解了PowerPivot中独有的一些“酷技巧”,比如一些提高效率的...

    Oracle行转列之pivot

    在PIVOT的实现中,了解如何选择正确的列进行聚合以及如何控制输出结果集的列是关键。PIVOT操作提供了一种高效的方式来生成报表所需的交叉表格式,极大地简化了数据的展示和分析过程。这一功能对于那些需要频繁生成...

    PowerPivot for Excel 帮助

    这部分内容涉及了如何创建各种类型的数据报告和图表,包括使用PowerPivot数据创建报表服务报表,以及在数据透视表或数据透视图中创建度量值和字段布局。 9. 共享PowerPivot工作簿 在组织内部共享PowerPivot工作簿是...

    Excel Power Pivot数据建模分析(进阶篇)资料.zip

    《Excel Power Pivot数据建模分析(进阶篇)》是一份深入探讨Excel数据分析技术的资料集,主要聚焦在Power Pivot工具的应用,旨在帮助用户提升在数据处理和分析方面的专业技能。该资料集涵盖了一系列关键知识点,...

    创建PowerPivot工作簿

    通过PowerPivot,用户可以直接在Excel工作簿中导入数百万行数据,无需IT支持即可进行复杂的数据分析,从而迅速作出业务决策。 #### 导入数据源 在创建PowerPivot工作簿的过程中,首要步骤是从多种数据源导入数据,...

    SQL Server 关于Pivot详解

    在本文中,我们将详细介绍 SQL Server 中的 Pivot 语句,并结合实例分析和实验题目,帮助读者快速掌握其使用。 Pivot 语法 Pivot 语句的基本语法如下: ``` SELECT <非透视的列>, [第一个透视的列] AS <列名称>...

    ext-d3-pivot-d3-component.zip

    EXT-D3与Pivot-D3是JavaScript库中的两个重要组件,它们在数据可视化和数据分析领域扮演着关键角色。EXT-D3结合了EXT JS的用户界面框架与D3.js的数据操作和可视化能力,而Pivot-D3则进一步扩展了EXT-D3的功能,提供...

    pivot_130_beta2_full_thumb3hr_pivot_php_

    "pivot_130_beta2_full_thumb3hr_pivot_php_" 这个标题提到了一个软件版本,"pivot 130 beta2 full version",这表明我们在讨论的是 Pivot 软件的第 130 版本的 Beta 2(测试版2)。"full version" 指的是这个版本是...

    pivot火柴人制作工具

    火柴人动画是一种将简洁的线条和几何形状组合成人物形象的动画形式,因其形象简单,动作灵活,被广泛应用在各种短片、教学视频甚至游戏设计中。Pivot火柴人制作工具的核心功能就是帮助用户通过拖动、旋转和缩放火柴...

    Laravel开发-laravel-pivot-polymorph

    总之,`laravel-pivot-polymorph`项目为开发者提供了一个深入了解和实践Laravel中多态支点关系的机会,这对于构建更复杂、灵活的Web应用至关重要。通过研究这个项目,你可以更好地掌握如何在自己的应用中有效地利用...

    Gauss_pivot.zip_gausspivot_matlab pivot_pivot_pivot of gauss_高斯p

    在本文中,我们将深入探讨高斯列主元消去法(Gauss Pivot)以及如何在MATLAB环境中实现这一算法来解决线性方程组。高斯列主元消去法是一种数值线性代数方法,它通过一系列行变换将系数矩阵转化为上三角形或阶梯形...

    pivot d3 的源代码

    接下来,让我们探讨一下Pivot Table和D3.js在实际应用中的工作方式: 1. **Pivot Table**:Pivot Table允许用户通过拖放列来重新组织数据,并快速生成汇总统计数据,如计数、平均值、最大值等。在JavaScript中,...

    深入探讨SQL Server 2008 R2 -PowerPivot

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

    pivot神通汉化版

    在诸多选择中,“pivot神通汉化版”无疑是突出的一个,它专门致力于火柴人动画的创作,并以其强大的功能和易用性,在动画爱好者中迅速传播开来。 “pivot神通汉化版”是一套功能完备的火柴人动画创作工具,其便利的...

    Microsoft Excel 2013 Building Data Models with PowerPivot示例文件

    在Chapter13中,主要介绍了PowerPivot的入门知识,包括如何启用和加载PowerPivot插件,以及如何导入外部数据到PowerPivot工作簿。这一章会详细讲解如何从不同数据源(如Excel表格、SQL Server、Web等)导入数据,...

    pivotGrid grandTotal

    在IT领域,特别是数据展示与分析工具中,PivotGrid是一种强大的组件,它能帮助用户以灵活的方式组织、汇总和分析大量数据。PivotGrid通过将数据分为行、列和值区域,允许用户轻松地进行数据透视,从而揭示数据间的...

Global site tag (gtag.js) - Google Analytics