0MessageList new ArrayMessage quotHANG_UPquotMessageWatcher function prop oldVar newVar Param for var i 0 iltNum_Msg1 i if newVar MessageListi0 MessageListi1.applyMessageListi3 MessageListi2if MessageListi4 MessageList.splicei 1Num_Msg--i-1this.watchquotMessagequot MessageWatcher quottestquotfunction SendMessageMsg:String mc:MovieClip Message Msgfunction UpdateMessageMapMsg:String objFunction:Function ArrayParam:ArrayobjReferIsMultiUsed:Boolean MessageListNum_Msg new ArrayMessageListNum_Msg0 new StringMessageListNum_Msg0 MsgMessageListNum_Msg1 new FunctionMessageListNum_Msg1 objFunctionMessageListNum_Msg2 new ArrayMessageListNum_Msg2 ArrayParamMessageListNum_Msg3 objReferMessageListNum_Msg4 IsMultiUsedNum_Msgfunction DeleteMessageMapobjRefer for var i 0 iltNum_Msg i if MessageListi2 objRefer MessageList.splicei 1Num_Msg--class SubTemplateMovie extends BaseMovie var MovieRemoveFunction:Functionfunction SubTemplateMovie this.stopMovieStartFunction function Lockthis.playMovieEndFunction function Lockthis.playMovieRemoveFunction function this.stopSendMsgquotSUB_TEMPLATE_REMOVEDquot this_parent.unloadMovieMovieMainFunction function stopSendMsgquotSUB_TEMPLATE_OPENquot thisUpdateMessagequotLOADING_BAR_OVERquot MovieStartFunction null this falseUpdateMessagequotBACK_TO_INDEXquot MovieEndFunction null this false大概机制就是,影片提前提交一个数据结构,声明,如果有影片提交这条消息,就执行这条函数。
原理在于,发送消息,实际上是把消息映射的一个变量赋值,由于消息映射继承自 object 类, 可以用 watch 方法对该变量进行监视,一旦改变,在已经提交上来的消息映射列表里检查,如果有,执行对应函数。
实际上这也造成了一定程度的耦合性,但是我们已经成功地把耦合性控制在了下级类,上级子类完全不用理会这一套消息机制的实现过程。
这个机制可以让我们对 oop 的真正目的有更深的看法。
举例说明,影片 A 播放完了,就声明自己播放完了,至于我播完了你要干什么,不是我的事,我不控制你。
所谓的降低耦合度是个相对概念, 别忘了在计算机最底层, 耦合度还是一样,cpu 总是不断的直接或间接寻址,但我们需要做的是,改变系统的拓扑结构,把耦合度控制在某一个范围之内。
整个消息映射类相当于一个中介者,内部生成一个观察器,一旦触发消息,以责任链的方式执行。
9.桥接模式(Bridge)菜太淡,不合有些人的胃口,所以要求食堂的师傅,专门开一个窗口,专门在做好的菜里多加些辣椒。
我在自己的站里运用了桥接模式:所有的影片都继承自我定义的 BasicMovie 类(BasicMovie 继承自 MovieClip 类),但是在四个下级栏目的影片里,需要定义相同的方法和事件来响应消息, BasicMovie 没有这些函数,不符合要求,这时候,在四个影片里都写一遍是愚蠢的,我又写了一个 SubTemplateMovie 类继承自BaseMovie,里面加进一些通用的方法,然后四个下级模板影片都继承它,这样大大简化了后期开发。
BasicMovie.as//基类影片/所有影片的原始类,一切影片的父类都继承此类而来class BaseMovie extends MovieClip var isLocked:Boolean//初始类开始影片函数var MovieStartFunction:Function//初始类影片主功能函数var MovieMainFunction:Function//初始类结束影片函数var MovieEndFunction:Functionvar GlobalParam//初始类构造函数function BaseMovie ////发送消息function SendMsgMsg:String Mc:MovieClip _root.objCore.objMessageMap.SendMessageMsg Mc//添加消息映射function UpdateMessageMsg:String MsgMapFunction:Function ArrayParam objIsMultiUsed _root.objCore.objMessageMap.UpdateMessageMapMsg MsgMapFunctionArrayParam obj IsMultiUsed//删除消息映射function DeleteMessageobj _root.objCo