从MVC理解设计模式

[size=x-large] 本文将透过MVC来帮助我们理解“模式”这一术语的含义。
MVC包含三类对象。模型Model是应用对象,视图View是它在屏幕上的标示,控制器Controller定义用户界面对用户输入的相应方式。不使用MVC,用户界面设计往往将这些对象混在一起,而MVC则将它们分离以提高灵活性和复用性。
MVC通过创建一个“订购/通知”协议来分离视图和模型。视图必须保证它的显示正确地反映了模型的状态。一旦模型的数据发生变化,模型就通知有关的视图,每个视图相应地得到刷新自己的机会。这种方式可以让你为一个模型提供不同的多个视图表现形式,也能够为一个模型创建新的视图而无需重写模型。
从表面上看,这个例子反映了将视图和模型分离的设计,然而这个设计还可以解决更一般的问题:将对象分离,使得一个对象的改变能影响到另一些对象,而这个对象并不需奥知道哪些被影响的对象的细节。这个更一般的设计被描述为Observer模式。
MVC的另一个特征是视图可以嵌套。例如,按钮控制面板可以用一个嵌套了按钮的复杂视图来实现。对象查看器的用户界面可由嵌套的视图构成,这些视图又服用与调试器。MVC用View的子类----CompositeView类来支持嵌套视图。CompositeView类的对象行为上类似于View类对象,一个组合视图可用于任何视图可用的地方,但是它包含并管理嵌套视图。
上例反映了可以讲组合视图与其构件平等对待的设计,同样的,该设计也适用于更一般的问题:将一些对象化为一组,并将该组对象当做一个对象来使用。这个设计被描述为Composite模式,该模式允许你创建一个类层次结构,一些子类定义了原子对象(如Button)而其他类定义了组合对象(CompositeView),这些组合对象是由原子对象组合而成的更复杂的对象。
MVC允许你在不改变视图外观的情况下改变视图对用户输入的相应方式。例如,你可能希望改变视图对键盘的相应方式,或者希望使用弹出菜单而不是原来的命令键方式。MVC将相应机制封装在Controller对象中。存在着一个Controller类层次结构,使得可以方便的对原有Controller做适当改变而创建新的Controller。
View使用Controller子类的实例来实现一个特定的相应策略。要实现不同的相应策略只要用不同的Controller实例替换即可。甚至可以再运行时刻通过改变View的Controller来改变View对用户输入的相应方式。例如,一个View可以被禁止接受任何输入,只要给它一个忽略输入事件的Controller。
View - Controller关系是Strategy模式的一个例子。一个策略是一个表述算法的对象。当你想静态或动态地替换一个算法,或你有很多不同的算法,或算法中包含你想要封装的复杂的数据结构,这时策略模式是非常有用的。
MVC还使用了其他的设计模式。如:用来指定视图缺省控制器的Factory Method和用来增加视图滚动的Decorator。但是MVC的主要关系还是有Observer、Composite和Strategy三个设计模式给提出的。[/size][/size][/size][/size][/size]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值