MVC设计模式小试验

原创 2004年09月18日 18:55:00

看了一下moock的《Essential.Actionscript.2.0》,全书都写得不错,不愧为actionscript的权威写出来的书。注意了一下,MVC模式这一章。MVC也不是什么新概念了, 早在smalltalk中开始流行了, 现在C++中的document/view结构也是这种原理。通过消息映射达到从view响应的事件改变document的内容。一看moock的写法,就知道他是有java背景的人,包括Oberserable类和Oberserver接口,以及MVC的实现都是仿照传统的java写法。

关于MVC,这里有一篇权威说明:http://st-www.cs.uiuc.edu/users/smarch/st-docs/mvc.html

我也用moock的方法,依照原来的一个java例子,做了个显示温度的,分华氏温度和摄氏温度显示。它们所用的Model和Control却是一样的,只不过View 的表现不同。 这就是MVC的优势所在。还有一个用温度计来显示的View,可以用我的com.flashvan.Graphic类来实现,下次做完把源码一起放上来。utils包和mvc包里面的内容我就省略了,可以到moock的网站下载http://moock.org/eas2/examples/eas2_mvcclock.zip

 

 

//Model
import util.Observable;
import temperature.*;
class temperature.TemperatureModel extends Observable
{
        private var temperatureF:Number = 32.0;
        
        public function getF():Number
        {
                return temperatureF;
        }
        
        public function getC():Number
        {
                return (temperatureF - 32.0) * 5.0 / 9.0;
        }
        
        public function setF(tempF:Number):Void
        {
                temperatureF = tempF;
                setChanged();
                notifyObservers();
        }
        
        public function setC(tempC:Number):Void
        {
                temperatureF = tempC * 9.0 / 5.0 + 32.0;
                setChanged();
                notifyObservers();
        }
        
}

//View base
import util.*;
import temperature.*;
import mvc.*;
import mx.containers.Window;
import mx.controls.Button;
import mx.controls.TextInput;
import mx.controls.Label;
import mx.managers.DepthManager;
class temperature.TemperatureGUI extends AbstractView
{
        private var temperatureWindow:Window;
        private var label:Label;
        private var display:TextInput;
        private var upBtn:Button;
        private var downBtn:Button;
        private var temperatureGUI_mc:MovieClip;
        
        private function TemperatureGUI(l:String,m:TemperatureModel, c:Controller, target:MovieClip, depth:Number, x:Number, y:Number)
        {
                super(m, c);
                makeTemperatureGUI(l,target, depth, x, y);
        }
        
        private function makeTemperatureGUI(l:String,target:MovieClip, depth:Number, x:Number, y:Number):Void
        {
                //建立一个空的MovieClip
                temperatureGUI_mc = target.createEmptyMovieClip("gui"+depth, depth);
                //temperatureGUI_mc._x = x;
                //temperatureGUI_mc._y = y;
                
                //窗口
                temperatureWindow =temperatureGUI_mc.createClassObject(Window, "temperatureWindow", 0);
                temperatureWindow.title = l+"  温度显示";
                temperatureWindow.move(x,y);
                temperatureWindow.setSize(250,200);
                
                //标签
                label = temperatureWindow.createClassChildAtDepth(Label, DepthManager.kTop);
                label.text = l+"温度为:";
                label.move(20,50);
                
                //文本显示框
                display = temperatureWindow.createClassChildAtDepth(TextInput, DepthManager.kTop);
                display.editable = false;
                display.setSize(200,display.height);
                display.move(label.x,label.y+label.height+10);
                
                //升温按钮
                upBtn = temperatureWindow.createClassChildAtDepth(Button , DepthManager.kTop);
                upBtn.label = "升温";
                upBtn.setSize(60,upBtn.height);
                upBtn.move(display.x+30,display.y+display.height+10);
                upBtn.addEventListener("click", getController());
                
                //降温按钮
                downBtn = temperatureWindow.createClassChildAtDepth(Button, DepthManager.kTop);
                downBtn.label = "降温";
                downBtn.setSize(60,downBtn.height);
                downBtn.move(upBtn.x+upBtn.width+10,upBtn.y);
                downBtn.addEventListener("click", getController());
                
                update();
                
        }
        
        public function defaultController (model:Observable):Controller
        {
                return new TemperatureController(model);
        }
        
        
        public function setDisplay (s:String):Void{ display.text =s;}
        
        public function getDisplay():Number
        {
                //var result:Number = 0.0;
                var result:Number = Number(display.text);
                return result;
        }
        
        
        public function update (o:Observable, infoObj:Object):Void
        {
        }
}
//Farenheit View
import util.*;
import temperature.*;
import mvc.*;
class temperature.FarenheitGUI extends TemperatureGUI
{
        public function FarenheitGUI(m:TemperatureModel, c:Controller, target:MovieClip, depth:Number, x:Number, y:Number)
        {
                super("华氏", m, c, target,depth,x,y);
                //setDisplay(""+model.getF());
        }
        
        
        public function update (o:Observable, infoObj:Object):Void
        {
                setDisplay("" + TemperatureModel(getModel()).getF());
        }
}
//Celsius View
import util.*;
import temperature.*;
import mvc.*;
class temperature.CelsiusGUI extends TemperatureGUI
{
        public function CelsiusGUI(m:TemperatureModel, c:Controller, target:MovieClip, depth:Number, x:Number, y:Number)
        {
                super("摄氏", m, c, target,depth,x,y);
                //setDisplay(""+model.getF());
        }
        
        
        public function update (o:Observable, infoObj:Object):Void
        {
                setDisplay("" + TemperatureModel(getModel()).getC());
        }
}

//Controller
import temperature.TemperatureModel;
import mvc.*;
import util.*;
class temperature.TemperatureController extends AbstractController
{
        
        public function TemperatureController (tm:Observable)
        {
                super(tm);
        }
        public function upTemperature()
        {
                var m:TemperatureModel= TemperatureModel(getModel());
                m.setF(m.getF()+1);
        }
        
        public function downTemperature()
        {
                var m:TemperatureModel= TemperatureModel(getModel());
                m.setF(m.getF()-1);
        }
        
        public function click(e:Object):Void
        {
                switch (e.target.label)
                {
                        case "升温": upTemperature();break;
                        case "降温": downTemperature();break;
                        default:break;
                }
        }
}
//主程序 import temperature.*; class temperature.Thermometer { //程序入口 public static function main (target:MovieClip,f:Number) { var tm:TemperatureModel = new TemperatureModel(); var fg:FarenheitGUI = new FarenheitGUI(tm,undefined, target, 2, 10, 50); var cg:CelsiusGUI = new CelsiusGUI(tm,undefined, target, 3, 300, 50); tm.addObserver(fg); tm.addObserver(cg); if(f!=undefined) tm.setF(f); } } //*.fla import temperature.Thermometer; Thermometer.main(this);

在fla文件中要拖出Window,Button,TextInput,Label这四个组件在放在库中,要不然不能显示

初识MVC——MVC与三层/MVC与设计模式

题记:对于刚接触项目的菜鸟来说,MVC是一个新鲜的东西,浅显的知道MVC是分为MODEL、View和controler层,于是觉得它与我们曾经用到的三层架构相似,于是就错误的混到了一起。由于想要知道它...
  • u012581322
  • u012581322
  • 2015年12月16日 21:53
  • 870

MVC设计之MVC设计模式(介绍)

mvc介绍; 首先先引用一个百度百科的介绍: MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件...
  • qiandublog
  • qiandublog
  • 2016年10月06日 19:12
  • 7070

正交设计助手的使用教程(设计测试用例的工具)

今天在查看其它文章,不知道哪来的光念,突然想起大学时候使用过的两个简单的小工具:正交设计助手和PICT,这两个工具目前我都没有在用,这里记录一下使用方法,一是为了让我不要忘记还有这两个工具,二是测试过...
  • quiet_girl
  • quiet_girl
  • 2016年02月19日 16:10
  • 4366

MVC设计模式及其带来的优点

MVC的具体含义是:model+view+control,即模型+视图+控制它们各自处理自己的任务: (1)模型:模型持有所有的数据、状态和程序逻辑。模型独立于视图和控制器。 (2)视图:用来呈现...
  • huangjinsheng1988
  • huangjinsheng1988
  • 2015年11月27日 17:10
  • 12768

浅谈什么是MVC设计模式

什么是MVC?      MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据...
  • ricky73999
  • ricky73999
  • 2017年02月23日 23:51
  • 1620

WEB开发三层架构及MVC设计模式概述

关于   三层架构(3-tier application) 通常意义上的三层架构就是将整个业务应用划分为:表现层(UI)、业务逻辑层(BLL)、数据访问层(DAL)。区分层次的目的即为了“高内聚,低耦...
  • qq_16526497
  • qq_16526497
  • 2015年07月29日 08:33
  • 1754

MVC设计模式---小笔记

 MVC是一种目前广泛流行的软件设计模式,早在70年代,IBM就推出了Sanfronscisico项目计划,其实就是MVC设计模式的研究。近来,随着J2EE的成熟,它正在成为在J2EE平台上推荐...
  • u010672486
  • u010672486
  • 2014年03月20日 16:44
  • 198

理解MVC设计模式

快速理解MVC设计模式(适用于菜鸟)
  • u012302681
  • u012302681
  • 2014年09月08日 07:34
  • 658

JavaWeb实现MVC设计模式(概念解析)

一、MVC介绍:MVC设计模式是一种用于Web应用程序的架构模式,指将Web应用分为 模型层-视图层-控制层,它强制性的将应用程序的输入、处理、输出流程按照 Model-View-Controller...
  • a_good_programer
  • a_good_programer
  • 2016年10月18日 14:01
  • 1279

MVC设计模式简单介绍

MVC简介  MVC架构是一个复杂的架构,其实现也显得非常复杂。但是,我们已经总结出了很多可靠的设计模式,多种设计模式结合在一起,使MVC架构的实现变得相对简单易行。Views可以看作一棵树,显然可以...
  • jbjwpzyl3611421
  • jbjwpzyl3611421
  • 2010年08月05日 10:15
  • 5442
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:MVC设计模式小试验
举报原因:
原因补充:

(最多只允许输入30个字)