MVC模型

MVC(Model-View-Controller)模式用于构建用户界面,分离模型、视图和控制器对象,提高灵活性和复用性。模型负责数据,视图负责显示,控制器处理用户输入。通过Observer模式,模型变更会通知视图更新。Composite模式用于支持视图的嵌套。Controller作为Strategy模式的实例,可动态改变视图的响应策略。
摘要由CSDN通过智能技术生成

透过 MVC 来看设计模式将帮助我们理解“模式”这一术语的含义。

类的模型/视图/控制器( Model / View / Controller)三元组( MVC )被用来构建用户界面。

MVC包括三类对象:

  • 模型 Model 是应用对象;
  • 视图 View 是它在屏幕上的表示;
  • 控制器 Controller 定义用户界面对用户输入的响应方式。

不使用 MVC,用户界面设计往往将这些对象混在一起,而MVC则将它们分离,以提高灵活性和复用性。
MVC通过建立一个“订购 /通知”协议来分离视图和模型。视图必须保证它的显示正确地反映了模型的状态。一旦模型的数据发生变化,模型将通知有关的视图,每个视图相应地得到刷新自己的机会。这种方法可以让你:

  • 为一个模型提供不同的多个视图表现形式;
  • 也能够为一个模型创建新的视图而无须重写模型。

下图显示了一个模型和三个视图(为了简单起见我们省略了控制器)。
模型包含一些数据值;视图通过电子表格、柱状图、饼图这些不同的方式来显示这些数据。
当模型的数据发生变化时,模型就通知它的视图,而视图将与模型通信以访问这些数据值。
这里写图片描述

MVC 的主要关系是由 Observer、 Composite 和 Strategy 三个设计模式给出的。

  1. 上述例子反映了MVC的一个特征是:将视图和模型分离的设计。
    然而这个设计还可用于解决更一般的问题:将对象分离,使得一个对象的改变能够影响另一些对象,而这个对象并不需要知道那些被影响的对象的细节。这个更一般的设计被描述成 Observer (观察者)模式

  2. MVC 的另一个特征是:视图可以嵌套。
    例如,按钮组件可以用一个嵌套了按钮的复杂视图来实现。MVC用View类的子类—Composite View类来支持嵌套视图。 Composite View类的对象行为上类似于View类对象,一个组合视图可用于任何视图可用的地方,但是它包含并管理嵌套视图。
    上例反映了可以将组合视图与其构件平等对待的设计,同样地,该设计也适用于更一般的问题:将一些对象划为一组,并将该组对象当作一个对象来使用。这个设计被描述为Composite(组合)模式,该模式允许你创建一个类层次结构,一些子类定义了原子对象(如Button)而其他类定义了组合对象(Composite View),这些组合对象是由原子对象组合而成的更复杂的对象。

  3. MVC 允许在不改变视图外观的情况下改变视图对用户输入的响应方式。
    例如,你可能希望改变视图对键盘的响应方式,或希望使用弹出菜单而不是原来的命令键方式。 M V C将响应机制封装在 C o n t r o l l e r对象中。存在着一个 C o n t r o l l e r的类层次结构,使得可以方便地对原有
    C o n t r o l l e r做适当改变而创建新的 C o n t r o l l e r。
    Vi e w使用C o n t r o l l e r子类的实例来实现一个特定的响应策略。要实现不同的响应策略只要用不同种类的C o n t r o l l e r实例替换即可。甚至可以在运行时刻通过改变 Vi e w的C o n t r o l l e r来改变Vi e w对用户输入的响应方式。
    例如,一个 Vi e w可以被禁止接收任何输入,只需给它一个忽略输入事件的C o n t r o l l e r。
    Vi e w - C o n t r o l l e r关系是Strategy(策略)模式的一个例子。
    一个策略是一个表述算法的对象。当你想静态或动态地替换一个算法,或你有很多不同的算法,或算法中包含你想封装的复杂数据结构,这时策略模式是非常有用的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值