[AS3.0]一步一步学ActionScript 3.0(十二)

TI DSP TMS320F280025 Note1:工程模板Template创建 该方法新建的工程支持寄存器开发,同时也支持库函数开发,新建后移动该工程也不需要重新修改路径,路径使用变量定义,使用方便、移植性能高 阅读详情

在这一节中我们来看一下MVC模式,用MVC模式去构建我们的程序会使程序结构更清晰。

MVC模式是"Model-View-Controller"的缩写,中文翻译为"模式-视图-控制器"。MVC应用程序总是由这三个部分组成。Event(事件)导致Controller改变Model或View,或者同时改变两者。只要Controller改变了Models的数据或者属性,所有依赖的View都会自动更新。

MVC模式能使界面(Viwe)和数据(Model)能有效的分开,由控制器(Controller)去控制。

我们现在以一个比较简单的电子时钟的例子来看看如何使用MVC模式来架构我们的程序.

首先我们来看一下Model,Model按照我的理解是数据,就是所有的共用数据都是存储在Model里面的,时钟里有这样的数据,小时,分钟,秒;现在我们来建立一个Model,ModelLocator.as:

package net.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这个类:

package net.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:

package net.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的数据显示到文本框中。

要使程序运行,我们现加一个文档类:

package net.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去改变界面。

有人可以会说这个程序用更少的代码就可以完成,但这里只是演示程序的架构,当程序很大时,好的架构会使程序更清晰。

下节继续。 

(本教程如需转载请注明出处!)

海思Hi3516DV300实战:从yolov5模型训练到Sort跟踪算法的完整部署流程 本文详细介绍了在海思Hi3516DV300芯片上部署YOLOv5目标检测与Sort多目标跟踪算法的完整流程。内容涵盖从特定场景数据训练YOLOv5模型、模型格式转换(PyTorch到ONNX再到Caffe),到利用海思NNIE引擎生成WK模型并进行端侧集成与优化的全链路实战经验,旨在解决嵌入式设备上实时人流量统计等实际应用挑战。 阅读详情

相关推荐

[AS3] 时钟的MVC例子(适合初MVC的人看)

时钟的MVC例子(适合初MVC的人看)

AS3中的MVC框架解读

真不想讨论这个问题。MVC,TDD一类,是被炒作过的概念,实际上已经具有了特殊性,并不能用普通的方式来验证它的正误。专家说它好未必真好,因为那是专家,有人说他好未必真好,因为可能已经被洗脑了。本来嘛,只要是个东西,就肯定有支持派和反对派,但是在炒作氛围内,反对派的声音是听不到的。 所以这种时候,能够相信的只有自己。 以下也是我个人的看法,同意或者不同意,悉听尊便。 什么是MVC? 不知

Gerry的专栏 7245

AS3.0 MVC框架

MVC 框架 AS3.0版本 puremvc AS3.0项目 相当好用的东西

AS3菜鸟教程12-MVC模式

<br />在这一节中我们来看一下MVC模式,用MVC模式去构建我们的程序会使程序结构更清晰。<br />MVC模式是”Model-View-Controller”的缩写,中文翻译为”模式-视图-控制器”。MVC应用程序总是由这三个部分组成。 Event(事件)导致Controller改变Model或View,或者同时改变两者。只要Controller改变了Models的数据或者属性, 所有依赖的View都会自动更新。<br /><br />MVC模式能使界面(Viwe)和数据(Model)能有效的分开,由

qiaoyanma0217的专栏 888

AS3 mvc应用

在程序开发中,为了降低程序的耦合度,我们经常会对程序进行模式化,这一节中,我们介绍MVC的设计模式,MVC由三层结构构成,分别是视图器(view),模型器(model),控制器(control)。视图器view的作用是显示对象,即我们肉眼看到的元素。而视图器需要的数据我们把它放到模型器model里,那如何操作这些数据呢,这便涉及到我们的逻辑,我们把这部分的...

weixin_33941350的博客 182

(转)as3 MVC模式

MVC模式是”Model-View-Controller”的缩写,中文翻译为”模式-视图-控制器”。MVC应用程序总是由这三个部分组成。 Event(事件)导致Controller改变Model或View,或者同时改变两者。只要Controller改变了Models的数据或者属性

林榆耿的专栏 1185

[AS3.0]一步一步ActionScript 3.0()

        一直想写个关于AS3.0教程,但公司太忙都没时间写,最近看到群里有些朋友对3.0还不是很了解,所以从现在开始抽时间写点教程,从基本的东西开始.        很多人还习惯用2.0去写一些东西,我已经有半年多没用2.0,很多2.0的习惯不能带到3.0中来,比如说在MC或BUTTON上去写代码,当然3.0里面还是可以在帧上写代码(这里用到的版本是FLASH CS3,FLEX对于初

3729

[AS3.0]一步一步ActionScript 3.0()

as3.0中我们用的最多的可能就是“事件” ,我们会侦听各种事件。当我们点击一个按钮时,在2.0中我们可能会用到这样的语句:_btn.onPress = function(){};当然后我们也可以用addEventListener来侦听一个点击事件。在3.0中我们一律用addEventListener这种加侦听的方式来完成。_btn.addEventListener(

3014

[AS3.0]一步一步ActionScript 3.0()

前两节中,我们讲到了侦听,类与类之前也是可以侦听的,类与类之前的侦听就达到了类和类之前发消息的功能,这其实就是AS3.0中的消息机制。 我们先一个叫做MyClass的类:package net.smilecn{        import flash.display.Sprite;    import flash.events.Event;    import flash.events

1833

ActionScript 3.0初体验,与AS 2.0的一些区别(转)

初识ActionScript 3.0     AS3.0已有一段时间了,想把自已对AS3的一些认识和大家分享一下。主要想说说AS3AS2的不同之处,没有什么逻辑性,想到什么就写点什么,因此,它不适合AS高手们阅读。本文将力求用最直白的语言,尽量不用那些艰涩难懂的名词和术语。                               一 在什么地方写代码     失望,以为要说点啥,原来是这么小儿科的问题。没办法,我说过了,本文不适合AS高手阅读的。为了更好地理解,我们还是用例子来说明。现在,就让我们

1144

探秘AS3JS:将ActionScript 3.0带入JavaScript的世界

探秘AS3JS:将ActionScript 3.0带入JavaScript的世界 更新通知:由于关注度较低,该项目已不再维护。但其思想和成果仍值得回顾与习。 在线体验:想在浏览器中直接体验AS3JS吗?试试这个实时示例! 项目简介 AS3JS是一个基于Node.js的工具,它将ActionScript 3.0代码转换为纯JavaScript。灵感来源于ImportJS,它允许你利用AS3...

gitblog_00099的博客 707

探索AS3JS:将ActionScript 3.0转换为JavaScript的强大工具

探索AS3JS:将ActionScript 3.0转换为JavaScript的强大工具 项目介绍 AS3JS是一个基于Node.js的工具,旨在将ActionScript 3.0代码转换为纯JavaScript代码。这一工具不仅支持多种IDE的智能代码补全功能,如FlashDevelop和FDT,还允许开发者使用熟悉的AS3包结构编写代码,并自动转换为独立的JavaScript文件。AS3JS的核...

gitblog_00134的博客 819

ActionScript 3.0 语法

1.        在Flash Builder 4 中的角本文件声明:                       //角本内容         ]]>2.        常量和变量在ActionScript 3.0中使用常量和变量和其他的编程开发语言一样,没什么太大的区别,作用点都是相同的。简单理解就是常量就是值不会改变的量,变量则相反。  在AS3.0中常量也可以分为两种:顶级常量和用户自定

技术记录 2701

习Flex ActionScript 3.0 强烈推荐电子书

AdvancED ActionScript 3.0 Animation(《Make things move》姐妹篇,强烈推荐。详细介绍:点击这里) OReilly.ActionScript3.0.Cookbook.锦囊妙计.繁体中文版.rar (AS3的最佳入门书籍,强烈推荐。) OReilly.Flex.3.Cookbook中文翻译版(Flex 3

tekkenvs11的专栏 5789

实现了一个简单的AS3 MVC框架,希望对大家有所帮助!

实现了一个简单的AS3 MVC框架,希望对大家有所帮助!项目地址:https://code.google.com/p/m-mvc/需要的朋友可以下载swc,src及例子,该框架主要是通过NotificationBus全局控制消息(Notification)传播,弱化了模块之间的耦合!一些简单说明:BaseDataProxy负责与服务器进行数据的请求与发送操作BaseContoller负责业务...

weixin_30539835的博客 178

As3 MVC习入门

什么是MVC?m就是model,v就是view,c就是contrler;也就是为了减少程序的耦合度,狠很牛的人就运用该模式把应用程序分为三层,便于管理、二次开发等......,     model里面放着数据,供view和contrler来用,通常也在model里面派发事件,一直与两者保持独立。     view是用来显示界面让用户观察的,它是按用户请求去用model里面的数据,vie

诸葛应用 1925

有关于as3的puremvc框架实现和理解

今天习PureMVC,看了教程,写了Demo,记录并分享习过程。教程参考:http://puremvc.org/component/option,com_wrapper/Itemid,183/PureMVC使用观察者模式,将代码分离为三个离散的层:模式、视图和控制器,这三部分由三个单例模式类管理,分别是Model、View和Controller,三者合称为核心层或核心角色。PureMVC中还有...

yixiaohui54321的博客 529

PHP安装Redis扩展教程

安装redis 下载软件包phpredis  https://github.com/nicolasff/phpredis uzip  master    #解压得到 phpredis-master cd  phpredis-master  #进入安装文件夹 /www/wdlinux/php/bin/phpize  #用phpize生成configure配置文件 ./configu...

weixin_33834137的博客 120

最新grpc库和头文件

最新版grpc库和头文件,采用VS2015编译,测试可用,省去编译的烦恼

上一篇: [AS3.0]一步一步学ActionScript 3.0(十一)
下一篇: [AS3.0]一步一步学ActionScript 3.0(十三)
arrowyoung
博客等级 码龄23年 23粉丝 50原创
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值