十分广泛。
Asp 的每个模块要去不同的数据,访问数据库的不同表,就要跟不同的下层数据访问组件打交道。
就是说,每个 mc 模块必须知道,我要去哪个具体的数据访问组件取数据。
每个模块要维持自己的一个,至少是字符串。
如果运用外观模式。
我们可以让所有的需要数据交互的 mc 访问同一个 aspx 页面,比如 getStrXml.aspx。
只要传送一个标示符,就可以通知这个唯一的取数据的叶面,访问哪个下层组件获取数据。
下层组件不知道哪个 mc 要求数据,mc 也不知道数据的具体来源, 这样,上下层之间互相都显得不透明。
这就降低了耦合度。
12.代理模式(Proxy)可能我们不是每个人每天都想吃饭,所以我们要求猴子每天中午必须在寝室, 如果我们要吃,他就去,如果我们都不吃,他爱干嘛干嘛。
举例:这恐怕是每个人在 flash 里都会无意中用到的模式。
比如,一个网站,它的下级栏目不用在整个网站初始化的时候一开始就读进来,但是我们要确保, 在浏览者想看并且点击导航条上的某个按钮时,能够正确地读进相应的影片文件,前提是,我们必须在内部保留一个索引,可以称作代理。
通常是一个13.策略模式:(strategy)我每天先在食堂找座位,再打饭,再打菜,再买杯酸奶。
这已经模式化。
要是食堂有服务员,我也会要他这么做。
举例,策略模式是把一系列的算法封装起来,形成一个类。
这个模式几乎是随时随地都可以整合到别的模式里去的, 我的那一堆 xml 解析器实际上就是策略模式的应用,这个模式还应用到我网站的下层,因为 flash 提交给 aspx 页面的数据也是 xml 字符串,下层模块也需要相应的解析算法。
同样的,我把对 xml 的解析封装进了一个类。
//Cs 文件里的解析函数Class DataModel.BlogMsgs…Public DataSet parseXMLstring strXmlDataSet dsnew DataSet//。
。
把 xml 装载到 DataSet 里Return ds…14.享元模式(Flyweight)东西不够吃?给你摆 20 面镜子师傅,东西还是只有一份。
。
。
关于这个模式十分抱歉,我暂时还没想到在 flash 显示层里面的实现。
需要举例说明的是,浏览器的机制是,在有大量文字的英文文档里,相同的字母共享一个Flyweight,在内存里其实只占一份空间,然后在文档不同的地方显示,这样对于大量细粒度的效果来说,可以节省很多资源。
在下层,我们可以做到的就是, 对某个全局对象只在某处真正保存,任何对象想要这个全局对象,只引用它而不复制它。
在显示层里有哪位想到了该怎么做请一定赐教。
15.访问者模式(Visitor)只要愿意,我随时都可以跑到哪个窗口打要吃的东西,前提是,我必须跑这一趟。
举例:我说过,我的所有 mc 都继承自 BasicMovie 这个类,但不是我的所有 mc都要从后来获取数据库数据。
获取数据库数据所要访问的信息,比如 ip,路径,文件保存在配置文件里,初始化的时候读入内核,并且只有内核那里有一份。
在BasicMovie 里加入对这些全局变量的引用是不合适的,因为只有少数 mc 要用到,而且由于某些原因我无法再使用桥接模式(我已经有了 SubTemplateMovie,不能多继承),所以我用了访问者模式。
BasicMovie.as//获取全局变量function GetGlobalParam GlobalParam_root.objCore.strucGlobalParam如果上级 mc 不执行这个函数,是不能获取全局变量的,如果要用,就执行。
也就是说,需要的时候,我去访问它。
备注:声明一个 visit 操作,使得访问者可以正确访问需要的类。
16.状态模式(state)我今天想吃面,师傅问我:要什么料?西红柿鸡蛋,排骨还是牛肉?举例:状态模式是指将对象当前的某些状态局部化,当对象改变状态时,看起来好像改变了类。
例子还是我的滚动条。
如果要滚动的是文本框,就要引用一个TextField 的 Scrollmaxscroll 属性,如果是 mc,引用的是_y_height 属性,我用一个参数将二者区分,由一个 if 语句控制,让滚动条可以自由区别状态。
另外一个解决方案是定义 ScrollBar 的不同子类,这两者本质区别不大,在状态比较多时,可能要维持一个庞大的 if 算法,这样就用生成子类的方法比较好。
ScrollBar.as//滚动条组件function BindTomctype:StringintMcHeight:Numberyinitial:NumberScrollTypetypeiftypequotTXTquotscrollTxtmciftypequotMCquotinitialYyinitialMcHeightintMcHeightscrollMcmcfunction Scroll ifScrollTypequotTXTquotthis.onEnterFrame function scrollTxt.scroll scrollTxt.maxscrollmcBlock._y/BgLength-BlockLength3/2ifScrollTypequotMCquotthis.onEnterFramefunctionifscrollMc._heightgtMcHeightscrollMc._yinitialY-scrollMc._height-McHeightmcBlock._y/BgLength-BlockLength3/2备注:这也是常见模式,在 flash 的逻辑控制里尤其随处可见17.装饰模式(Decorator)在食堂吃饭,没筷子怎么行?我是从来不带饭盆的。
师傅很人性化,每个窗口都放着一大把筷子,随用随拿。
这个模式如果用好,有的地方可以很省力。
比如,我网站里的滚动条:ScrollBar.as//滚动条组件class ScrollBar extends BaseMovie var BgLength:Numbervar BlockLength:Numbervar mcBlock:MovieClipvar Width:Numbervar ScrollTypevar scrollTxt:TextFieldvar scrollMc:MovieClipvar McHeight:Numbervar initialY:Numberfunction ScrollBar function InitialScrollBarBgLength BlockLength this.BlockLength BlockLengththis.BgLength BgLengthfunction BindTomctype:StringintMcHeight:Numberyinitial:NumberScrollTypetypeiftypequotTXTquotscrollTxtmciftypequotMCquotinitialYyinitialMcHeightintMcHeight.
上一篇:
PHP访问MYSQL数据库的实现
下一篇:
台湾海峡台风浪的数值模拟