MVC的理解

这几天在看MVC模式,用来改造一个程序

参考材料为《head first 设计模式》


先把画的一个流程图拿出来溜溜

mvc


流程举例:

拿书上的例子来说,当用户在界面上设置BPM值的时候,View类中actionPerformed函数会因为这一动作而被调用,

actionPerformed判断出用户点击了设置按钮,调用函数获取设置的具体值bmp,然后调用Control的setBPM函数,bmp作为参数传入。

即用户的响应,具体怎么处理由Control来决定!

在书中,Control调用了Model的setBPM,即更新Model中数据。

而Model中setBPM()中,对成员bpm进行了更新,

然后通知了观察者,即View,代码上体现为调用View的一个Update函数,UpdateBMP()

在View的UpdateBMP()中

通过调用Model的getBMP(),得到了最新数据,然后显示出来。

整个流程从View->Control->Model->View,

如果不采用MVC,最简单的方案是所有数据和响应放到一个类中,CTotal,

CTotal监听并处理用户响应,数据和所有响应代码都在其中。

MVC虽然流程繁琐,但是,做到了低耦合,比如现在要换一套界面,从控制台Console换到GUI,那么修改View类即可。

而CTotal的方案改起来就非常麻烦!!!


笔记如下:

模型包含了所有的状态、数据和应用逻辑
控制器操作模型
模型通知视图状态的改变!

注意,书中531页的问答中说,控制器也可以变成模型的观察者。因为在某些设计中,控制器会向模型注册,模型一有改变就会通知控制器。当模型直接影响到用户界面时,就会这么做。比方说,模型内的某些状态可以支配界面的某些项目变成有效或无效,如果这样,要求视图更新相应显示就是控制器的事。
控制器的作用是获取用户的输入并解读其对模型的意思,也有可能
需要告诉视图改变其结果,比如灰化某些按钮!

视图用来呈现模型,视图通常直接从模型中取得它需要显示的状态与数据


P532
模型利用观察者模式让控制器和视图可以随最新的状态改变而更新
另一方面,视图和控制器则实现了策略模式

P537

一:
模型使用观察者模式
模型是真正干活的,对数据进行各种加工和操作!!!!
允许视图和控制器成为观察者


P540
视图持有模型和控制器的引用!
代码层次则是视图类拥有指向模型类和控制器类的指针

通过视图,获取了要显示的数据  
视图自身创建各种界面元素
并提供接口让外部 改变用户界面!!!
注意:
在视图的构造函数中:
1    对模型和控制器引用进行了赋值!
2    将视图注册为模型的观察者!!
视图的某些更新界面的函数会被模型中的通知函数调用!!


P543
控制器持有模型和视图的引用
在控制器的构造函数中,参数为模型引用
在构造函数中,首先对模型进行了赋值,
然后新建了一个视图,调用了模型和视图的一些初始化函数!

控制器帮助视图做决定:即控制器调用视图的接口

总结: 主要是各种调用!!!

总之:
一个类的函数分为两种:
  1. 操作自身数据,被别的类调用
  2. 调用其他类的函数
1 模型:
直接对数据进行操作的函数
获取数据的函数,供外界调用
模型中有些数据需要在视图中显示,当这些数据发生变化时
通知观察者(视图)进行界面的更新!

2 视图
视图中更新界面的函数由模型调用!
视图中用户操作响应函数中调用控制器响应函数

3 控制器
控制器构造函数中创建视图,初始化模型
各种响应函数被视图调用,
响应函数中调用模型和视图相关函数!
比如灰化按钮,设置数据新值!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值