Flash中oop的设计模式
作者 佚名技术
来源 服务器技术
浏览
发布时间 2012-07-13
大声嚷嚷。 举例:之所以要把这三个设计模式放在一块儿,是因为我在我的站里面结合这三者建立了一个好玩的东西,可以说是我的网站的核心所在。它解决了我的flash里面各个mc的通信问题。 比如,影片A放完了,要通知影片B开始播放,直接的做法是在A的最后一帧,写从A到B的相对路径或B的绝对路径,让B play()。这样做A和B的耦合性是相当高的,也就是说,相互依赖程度太高。运用设计模式的解决方案如下: MessageMap.as //消息映射类 class MessageMap extends Object { var Message:String; var MessageWatcher:Function; var Target; var MessageList:Array; var Num_Msg:Number; function MessageMap() { Num_Msg = 0; MessageList = new Array(); Message = "HANG_UP"; MessageWatcher = function (prop, oldVar, newVar, Param) { for (var i = 0; i MessageList[i][1].apply(MessageList[i][3], MessageList[i][2]); if (!MessageList[i][4]) { MessageList.splice(i, 1); Num_Msg--; i-=1; } } } }; this.watch("Message", MessageWatcher, "test"); } function SendMessage(Msg:String, mc:MovieClip) { Message = Msg; } function UpdateMessageMap(Msg:String, objFunction:Function, ArrayParam:Array, objRefer,IsMultiUsed:Boolean) { MessageList[Num_Msg] = new Array(); MessageList[Num_Msg][0] = new String(); MessageList[Num_Msg][0] = Msg; MessageList[Num_Msg][1] = new Function(); MessageList[Num_Msg][1] = objFunction; MessageList[Num_Msg][2] = new Array(); MessageList[Num_Msg][2] = ArrayParam; MessageList[Num_Msg][3] = objRefer; MessageList[Num_Msg][4] = IsMultiUsed; Num_Msg++; } function DeleteMessageMap(objRefer) { for (var i = 0; i MessageList.splice(i, 1); Num_Msg--; } } } } class SubTemplateMovie extends BaseMovie { var MovieRemoveFunction:Function; function SubTemplateMovie() { this.stop(); MovieStartFunction = function () { Lock(); this.play(); }; MovieEndFunction = function () { Lock(); this.play(); }; MovieRemoveFunction = function () { this.stop(); SendMsg("SUB_TEMPLATE_REMOVED", this); _parent.unloadMovie(); }; MovieMainFunction = function () { stop(); SendMsg("SUB_TEMPLATE_OPEN", this); }; UpdateMessage("LOADING_BAR_OVER", MovieStartFunction, null, this, false); UpdateMessage("BACK_TO_INDEX", MovieEndFunction, null, this, false); } } 大概机制就是,影片提前提交一个数据结构,声明,如果有影片提交这条消息,就执行这条函数。原理在于,发送消息,实际上是把消息映射的一个变量赋值,由于消息映射继承自object类,可以用watch方法对该变量进行监视,一旦改变,在已经提交上来的消息映射列表里检查,如果有,执行对应函数。实际上这也造成了一定程度的耦合性,但是我们已经成功地把耦合性控制在了下级类,上级子类完全不用理会这一套消息机制的实现过程。 这个机制可以让我们对oop的真正目的有更深的看法。举例说明,影片A播放完了,就声明自己播放完了,至于我播完了你要干什么,不是我的事,我不控制你。所谓的降低耦合度是个相对概念,别忘了在计算机最底层,耦合度还是一样,cpu总是不断的直接或间接寻址,但我们需要做的是,改变系统的拓扑结构,把耦合度控制在某一个范围之内。 整个消息映射类相当于一个中介者,内部生成一个观察器,一旦触发消息,以责任链的方式执行。 9.桥接模式(Bridge) 菜太淡,不合有些人的胃口,所 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |
你可能对下面的文章感兴趣
上一篇: swish max 做火焰效果下一篇: [原创]谈谈关于FLASH发布
关于Flash中oop的设计模式的所有评论