MVC模式是”Model-View-Controller”的缩写,中文翻译为”模式-视图-控制器”。MVC应用程序总是由这三个部分组成。 Event(事件)导致Controller改变Model或View,或者同时改变两者。只要Controller改变了Models的数据或者属性, 所有依赖的View都会自动更新。
MVC模式能使界面(Viwe)和数据(Model)能有效的分开,由控制器(Controller)去控制。
我们现在以一个比较简单的电子时钟的例子来看看如何使用MVC模式来架构我们的程序.
首先我们来看一下Model,Model按照我的理解是数据,就是所有的共用数据都是存储在Model里面的,时钟里有这样的数据,小时,分钟,秒;现在我们来建立一个Model,ModelLocator.as:
packagenet.smilecn.clock.model{
import flash.events.EventDispatcher;
import flash.events.Event;
public class ModelLocator extends EventDispatcher{
private var _hour:String;
private var _minutes:String;
private var _second:String;
public function ModelLocator():void{
}
public function get hour():String{
return _hour;
}
public function set hour(value:String):void{
_hour = value;
dispatchEvent(new Event("changeHour"));
}
public function get minutes():String{
return _minutes;
}
public function set minutes(value:String):void{
_minutes = value;
dispatchEvent(new Event("changeMinutes"));
}
public function get second():String{
return _second;
}
public function set second(value:String):void{
_second = value;
dispatchEvent(new Event("changeSecond"));
}
}
}
这个代码应该会好懂,这里ModelLocator继承了EventDispatcher这个类,继承这个类的原因是ModelLocator需要用dispatchEvent发消息出去。再来看一下Controller.as这个类:
packagenet.smilecn.clock.control{
import flash.utils.Timer;
import flash.events.TimerEvent;
import net.smilecn.clock.model.ModelLocator;
public class Controller{
private var _model:ModelLocator;
private var _timer:Timer;
public function Controller(model:ModelLocator):void{
_model = model;
}
public function startTime():void{
_timer = new Timer(1000,0);
_timer.addEventListener(TimerEvent.TIMER,timerHandler);
_timer.start();
}
private function timerHandler(event:TimerEvent):void{
var nowDate:Date = new Date();
_model.hour = nowDate.getHours()>9?String(nowDate.getHours()):"0"+nowDate.getHours();
_model.minutes =nowDate.getMinutes()>9?String(nowDate.getMinutes()):"0"+nowDate.getMinutes();
_model.second =nowDate.getSeconds()>9?String(nowDate.getSeconds()):"0"+nowDate.getSeconds();
}
}
}
这个类中我们用到了Timer类,因为我们用的是时钟,所以需要一个定时器,Timer是一个很好的定时器,Timer(1000,0),这里 1000是指1000毫秒,就是1秒钟触发一次定时钟,0表示次数,这里0是无限次,如果是大于0的数就是这个数的次数。侦听 TimerEvent.TIMER事件就是1秒钟去执行一次timerHandler方法,timerHandler方法的功能是得到当前的时间然后去改 变_model里面的值,再看一下ModelLocator.as里面的代码,当hour,minutes,second的值改变的时候就会去发消
息出去,那么谁来侦听这些消息呢,当然是View,现在来看下View.as:
packagenet.smilecn.clock.view{
import flash.display.Sprite;
import flash.events.Event;
import flash.text.TextField;
import net.smilecn.clock.model.ModelLocator;
import net.smilecn.clock.control.Controller;
public class View extends Sprite{
private var _model:ModelLocator;
private var _controller:Controller;
private var time_txt:TextField;
public function View(model:ModelLocator,controller:Controller):void{
_model = model;
_controller = controller;
time_txt = new TextField();
addChild(time_txt);
_model.addEventListener("changeHour",changeTimeHandler);
_model.addEventListener("changeMinutes",changeTimeHandler);
_model.addEventListener("changeSecond",changeTimeHandler);
_controller.startTime();
}
private function changeTimeHandler(event:Event):void{
time_txt.text = _model.hour+" : "+_model.minutes+" : "+_model.second;
}
}
}
在View里面,侦听了_model的事件,所以当收到数据改变的消息后,将_model的数据显示到文本框中。
要使程序运行,我们现加一个文档类:
packagenet.smilecn.clock{
import flash.display.Sprite;
import net.smilecn.clock.model.ModelLocator;
import net.smilecn.clock.control.Controller;
import net.smilecn.clock.view.View;
public class Clock extends Sprite{
private var _model:ModelLocator;
private var _controller:Controller;
private var _view:View;
public function Clock():void{
_model = new ModelLocator();
_controller = new Controller(_model);
_view = new View(_model,_controller);
addChild(_view);
}
}
}
在文档类中建立了ModelLocator、Controller、View的实例,ModelLocator产生的实例被传到了 Controller和View中,这样就保证了Controller和View使用是相同的ModelLocator,其实要达到这种效果不用这种方法 也可以,可以用到上一节中用到的单例模式。
这里作一个总结,Controller是一个控制者,它去改变ModelLocator,ModelLocator的数据被改变后去更新View, 使我们能看到数据。如果界面上有一些按钮交互,那么就应该是Controller去响应View里的按钮交互,响应后去通过一些操作后改变 ModelLocator,ModelLocator数据改变后通知View去改变界面。
有人可以会说这个程序用更少的代码就可以完成,但这里只是演示程序的架构,当程序很大时,好的架构会使程序更清晰。
分享到:
相关推荐
这对于初学者理解MVC模式以及AS3在游戏开发中的应用极具价值。 首先,让我们了解AS3。ActionScript 3是Adobe Flash Platform的主要编程语言,用于创建交互式内容、应用程序和网络服务。它具有高性能、面向对象的...
PureMVC AS3 Standard Framework 是一个轻量级的、开源的...通过使用PureMVC AS3 Standard Framework,开发者能够遵循MVC模式,有效地组织代码,降低耦合度,提高代码的可读性和可维护性,从而提升开发效率和产品质量。
MVC模式是软件工程中的一种架构模式,将应用程序分为三个核心部分:模型(Model)、视图(View)和控制器(Controller)。在PureMVC中,这三者都由特定的类来实现: 1. **模型(Model)**:负责处理应用程序的数据...
在Flash ActionScript3中,MVC模式能够帮助开发者创建可维护、可扩展的代码结构。 PureMVC是MVC模式的一种实现,它提供了一套完整的类库和框架,以促进代码的模块化和组件化。PureMVC的核心概念包括:模型(Model)...
在.NET开发领域,MVC(Model-View-Controller)架构是一种常见的设计模式,用于构建可维护性和可扩展性良好的Web应用程序。MVC5是ASP.NET框架的一个版本,它提供了更加强大和灵活的开发工具。在给定的“EF-Code-...
通过这个简单的AS3时钟MVC例子,初学者可以深入了解MVC模式的工作原理,并将其应用于更复杂的项目中。实践这样的例子有助于培养良好的编程习惯和设计模式意识,这对于任何IT职业发展都是至关重要的。
PureMVC AS3 MultiCore 是一个开源框架,用于构建ActionScript 3.0应用程序。它遵循Model-View-Controller(MVC)设计模式,并提供了一种结构化的方法来组织和管理应用程序的组件,使得代码更加模块化、可维护性和可...
AS3.0 MVC框架是一种基于ActionScript 3.0编程语言的设计模式实现,主要用于构建可维护性和可扩展性良好的大型应用程序。在这个框架中,我们主要关注三个核心组件:Model(模型)、View(视图)和Controller(控制器...
通过深入理解并应用Fabrication AS3框架,AS3开发者能够构建出高效、可维护的大型应用,同时享受到MVC模式带来的好处,如清晰的职责划分、易于测试和扩展的代码结构。在实际开发中,掌握如何有效地使用框架提供的...
它的核心组件包括Model(模型)、View(视图)和Controller(控制器),以及额外的Proxy(代理)、Mediator(中介者)和Command(命令)模式,增强了MVC模式的功能。 2. **MVC架构**:模型-视图-控制器架构是一种...
MVC(Model-View-Controller)是一种软件设计模式,它将应用程序的业务逻辑、用户界面和数据访问分离开来,从而提高代码的可维护性和可扩展性。在 WP-MVC 中,开发者可以利用 MVC 架构的优势来构建更复杂的 ...
下面将详细解释MVC模式以及在AS3中的实现方式。 **模型(Model)** 在MVC模式中,模型是应用程序的核心,它负责处理数据和业务逻辑。在这个时钟应用中,模型类(可能命名为`ClockModel`)将包含获取当前时间的方法...
### PHP的基本应用——MVC架构中的在线人数统计 #### 知识点概述 ...此外,通过使用MVC架构模式,我们可以更清晰地组织代码逻辑,使得程序更加模块化、易于维护。希望本实例能够为新手开发者提供一定的指导价值。
在MVC模式中: 1. **模型(Model)**:负责处理应用程序的数据和业务逻辑。在PureMVC中,模型层由Proxy和Mediator组成。Proxy管理数据,而Mediator协调模型对象和其他视图组件之间的通信。 2. **视图(View)**:...
通过研究这些源代码,开发者可以了解如何在AS3中实际应用MVC模式来构建游戏。此外,注释的存在使得源码更易于理解和学习,对于初学者来说尤其有价值。 总之,Flex AS3结合MVC模式为游戏开发提供了一种强大的工具。...
3. **PureMVC模式**: - **MacroCommand(宏命令)**:用于封装一系列命令,简化多个命令的执行流程。 - **Mediator(中介者)**:在视图组件与模型和控制器之间起桥梁作用,实现组件间的解耦。 - **Proxy(代理...
### 浅析MVC模式在WEB开发中的应用 #### 引言 随着互联网技术的快速发展,Web应用程序变得越来越复杂和庞大。传统的嵌套和面向过程的开发方式已无法满足当前项目的需求。在这种背景下,MVC(Model-View-Controller...