aswing 控制器

由于ActionScript3.0是事件驱动的强交互性语言,所以模型-视图-控制器设计模式在ActionScript3.0当中也会与在其他语言中的定义有所不同。

  • 数据模型是一个事件源(EventDispatcher)
  • 视图是一个事件源(EventDispatcher)
  • 控制器里面你有两个通道

1.一个通道监听视图的变化,并且把变化写入到模型

2.一个通道监听模型的变化,并且把变化输出到视图

 

如图3.2-2。

(图3.2-2)
当视图(View)被触动(比如鼠标点击或者键盘输入),视图将发出事件,这时候视图-模型通道(ViewToModelChannel)收到事件并且更新模型(Model)的内容。如图3.2-3所示。
(图3.2-3)
当模型(Model)发生改变,模型将发出事件,这时候模型-视图通道(ModelToViewChannel)收到事件并且更新视图(View)的显示。如图3.2-4所示。
(图3.2-4)

 

下面是这个模式的代码表述:

Model

package
{
import flash.events.EventDispatcher;

 

public class Model extends EventDispatcher
{
}
}

 

View

 

package
{
import flash.events.EventDispatcher;

 

public class View extends EventDispatcher
{
}
}

 

Controller

 

package
{
public class Controller
{
private var v2mChannel:Channel;
private var m2vChannel:Channel;

public function Controller(view:View, model:Model) {
this.v2mChannel = new ViewToModelChannel(view, model);
this.m2vChannel = new ModelToViewChannel(view, model);
}
}
}

 

class Channel {
protected var view:View;
protected var model:Model;

public function Channel(view:View, model:Model) {
this.view = view;
this.model = model;
}
}

 

class ViewToModelChannel extends Channel {

public function ViewToModelChannel(view:View, model:Model) {
super(view, model);

//监听来自视图的事件
this.view.addEventListener(……..
}
}

 

class ModelToViewChannel extends Channel {

public function ModelToViewChannel(view:View, model:Model) {
super(view, model);

//监听来自模型的事件
this.model.addEventListener(…….
}
}

 

下面,我们用一个简单的例子来介绍这个设计模式如何使用。在后面的章节当中,我们会大量使用这里所介绍的模型-视图-控制器设计模式。

 

如图3.2-5和3.2-6,这个程序有一个输出框架和一个输入框架。在输入框架增加或者减少模型的顶点,输出框架根据模型当中的顶点数绘制正多边形。

(图3.2-5)

 

(图3.2-6)

 

 

在这个例子当中,模型定义了一个vectorChanged事件(VECTOR_CHANGED)和一个正整数(vectors)。定义了两个公开的方法来操纵这个正整数(getVectors、setVectors)。如图3.2-7。

(图3.2-7)

 

模型对于外面发生的事情一无所知,它只知道在vectors改变的时候发布vectorChanged事件(VECTOR_CHANGED)。

 

 


 

笔记:

一个对象是由数据和方法所构成的,数据定义的是对象的状态,所以有的时候,数据又被叫做属性,比如例子当中的Model,数据域vectors表示这个Model目前是处在3个顶点的状态,或者是4个顶点的状态。

我们要强调的是对象当中的方法。对象当中的方法是对本对象自身的数据的操作。所以方法(Method)有时候又被叫做操作(Operation)。

posted on 2009-03-20 14:40  jiahuafu  阅读(404)  评论(0编辑  收藏  举报

导航