Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3245928
  • 博文数量: 530
  • 博客积分: 13360
  • 博客等级: 上将
  • 技术积分: 5473
  • 用 户 组: 普通用户
  • 注册时间: 2006-07-13 13:32
文章分类

全部博文(530)

文章存档

2017年(1)

2015年(2)

2013年(24)

2012年(20)

2011年(97)

2010年(240)

2009年(117)

2008年(12)

2007年(8)

2006年(9)

分类:

2010-09-27 11:16:28

功能解析:
1.相当于一个虚类,定义了几个常用方法
       public function get handler():Function  //获取函数处理器
       public function get source():Object     //获取观察对象
       public function execute(method:Function, ... params:Array):Object //用反射技术执行method
       protected function callHandler():void  //调用函数处理器
       protected function callHandlerWithArguments():void  //调用带参数的函数处理器


代码说明:
package com.adobe.cairngorm.observer
{
    //flex3引入这个包
    CONFIG::Flex3
    import mx.core.Application;

    //flex4引入这个包
    CONFIG::Flex4
    import mx.core.FlexGlobals;

    import mx.core.UIComponent;

    public class Observer
    {
        //是否带参数的函数处理器
        public var sendArgumentsToHandler:Boolean=false;

        //如果存在函数处理器,则为真
        protected var isHandlerInitialized:Boolean=false;

        //如果存在观察对象,则为真
        protected var isSourceInitialized:Boolean=false;

        //获取函数处理器,函数处理器是通过属性设置,所以在父类中只能表示存在这个函数处理器,返回null
        public function get handler():Function
        {
            return null;
        }

        //观察的对象是通过属性设置的,在这个父类中只能表示存在观察的对象,返回null
        public function get source():Object
        {
            return null;
        }

        //定义了一个excute函数,通过反射技术运行method,method可以带参数
        public function execute(method:Function, ... params:Array):Object
        {
            var returnValue:Object;
            try
            {
                returnValue=method.apply(null, params);
            }
            catch (e:Error)
            {
                delay(e);
            }
            return returnValue;
        }

        //定义了一个callHandler函数,用于调用Handler函数处理器
        protected function callHandler():void
        {
            try
            {
                callHandlerWithArguments();
            }
            catch (e:Error)
            {
                delay(e);
            }
        }

        //定义了一个callHandlerWithArguments函数,用于调用带参数的Handler函数处理器
        protected function callHandlerWithArguments():void
        {
            if (sendArgumentsToHandler)
            {
                handler.call(null, source);
            }
            else
            {
                handler.call();
            }
        }

        //flex4的抛出异常
        CONFIG::Flex4
        protected function delay(e:Error):void
        {
            UIComponent(FlexGlobals.topLevelApplication).callLater(throwException, [e]);
        }

        //flex3的抛出异常
        CONFIG::Flex3
        protected function delay(e:Error):void
        {
            UIComponent(Application.application).callLater(throwException, [e]);
        }

        private function throwException(e:Error):void
        {
            throw e;
        }
    }
}
阅读(1092) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~