zoukankan      html  css  js  c++  java
  • 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)。

  • 相关阅读:
    如何将latex格式转换成word? Lei
    SEWM2012会议报告总结 Lei
    matlab图片到word的过程 Lei
    日记——有点郁闷的一天
    牛博国际开放了,等了一个月才能看牛博。
    做什么事都没有兴趣呢,怎么这么低调呢?
    读UML书
    firefox弹出窗口关闭时执行代码刷新父窗口
    终于关注了一下传说中的小强,firebug
    MOSS Export Site Column/Site Content Type
  • 原文地址:https://www.cnblogs.com/jiahuafu/p/1417698.html
Copyright © 2011-2022 走看看