MVC模式理解续

在《MVC模式理解》一文,我们讨论的最后一个例子反映了View和Model分离的设计,然而这个设计经过拓展还可以处理更一般的问题,即将对象分离,使得一个对象的改变能够影响另一些对象,而这个对象并不需要知道这些被影响对象的细节。这个更这个更一般的设计被描述成Obs rver模式(观察者模式)。

MVC的另一个特征是View可以嵌套。例如,按钮控制面板View可以用一个嵌套了按钮的复杂View来实现。对象查看器的用户界面可由嵌套的View构成,这些View又可复用于调试器。MVC用View类的子类——CompositeView类来支持嵌套视图。CompositeView类的对象行为上类似于View类对象,一个组合视图可用于任何视图可用的地方,但是它包含并管理嵌套视图。

这反映了可以将组合视图与其构件平等对待的设计,同样地,该设计也适用于更一般的问题:将一些对象划为一组,并将该组对象当作一个对象来使用。这个设计被描述为Com posite(组合)模式,该模式允许你创建一个类层次结构,一些子类定义了原子对象(如Bu tton)而其他类定义了组合对象(CompositeView),这些组合对象是由原子对象组合而成的更复杂的对象。

此外,MVC还允许你在不改变视图外观的情况下改变视图对用户输入的响应方式。例如,你可能希望改变视图对键盘的响应方式,或希望使用弹出菜单而不是原来的命令键方式。MVC将响应机制封装在Controlle r对象中。存在着一个Controller的类层次结构,使得可以方便地对原有Controller做适当改变而创建新的Controller。

View使用Controller子类的实例来实现一个特定的响应策略。要实现不同的响应策略只要用不同种类的Controller实例替换即可。甚至可以在运行时刻通过改变View的Controller来改变View对用户输入的响应方式。例如,一个View可以被禁止接收任何输入,只需给它一个忽略输入事件的Controller。

View - Controller关系是Strategy(策略)模式的一个例子。一个策略是一个表述算法的对象。当你想静态或动态地替换一个算法,或你有很多不同的算法,或算法中包含你想封装的复杂数据结构,这时策略模式是非常有用的。

M V C还使用了其他的设计模式,如:用来指定视图缺省控制器的Factory Method(工厂方法模式)和用来增加视图滚动的Decorator (装饰模式)。但是MVC的主要关系还是由Obse rver(观察者模式)、Composite(组合模式)和Strategy(策略模式)三个设计模式给出的。

相关文章: 

If you enjoyed this post, please consider to leave a comment or subscribe to the feed and get future articles delivered to your feed reader.

Comments

还没有评论。

发表评论

(必填)

(必填)