智慧 + 毅力 = 无所不能

正确性、健壮性、可靠性、效率、易用性、可读性、可复用性、兼容性、可移植性...
随笔 - 991, 文章 - 0, 评论 - 27, 阅读 - 341万

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

组合模式(composite)

Posted on   Bill Yuan  阅读(347)  评论(0编辑  收藏  举报
我中午吃六两饭,猪肉炖粉条,辣子鸡,鱼丸,咸鸭蛋,外加两杯酸奶(猪!)
这些东西都是对象,他们共同组成了我的午饭。

举例:应该说在Flash里组合模式是无处不在的,因为只要还有mc的嵌套,就有组合模式存在。几个mc装在一个mc里,这个装载用的mc称作容器。
但是就这么说,恐怕没人会重视这个模式,因为不管理不理解他我们都在用。他的确有很多种实现方式,我的方式之一是这样的。

复制代码
//blog.as
class Blog extends BaseMovie {
    
//blog第一界面,包括日记列表,日历,最近留言
    var mcBlogList: mcBlogList;
    
//blog第二界面,包括日记全文,回复,对该日记的留言。
    var mcBlogDairy:MovieClip;
    var currentState:String;
    var currentDairyID:Number;
    function blog(){
    }
}
 
//mcBlogList.as
//blog第一界面
class mcBlogList extends BaseMovie {
    
//最近留言
    var recentMsgs:blogMsgsSC;
    
//日记列表
    var blogList:BlogList;
    
//日历
    var calendar:CalenderForBlog;
     

//mcblogDairy.as
//blog第二界面
class mcBlogDairy extends BaseMovie {
    
//日记全文显示
    var BlogDairy:BlogDairy;
    
//留言板
    var GuestBook:BlogInputMsg;
    
//留言列表显示
    var BlogMsgs:BlogMsgs;
}
复制代码

然后里面每个组件都还包含另外的组件,比如滚动条,动态文本框什么的,我想说的是,我写在as里的mc嵌套模式并不一定就符合fla文件里的具体物理嵌套模式,有很多装饰性的mc不需要包含进来,也有很多具体原因,需要改写路径。比如在BlogDairy下,滚动条的实际路径是 BlogDairy.mc1.ScrollBar,不做成BlogDairy.ScrollBar可能是因为我需要mc1的动画,也可能是别的具体原因。但是我们可以在mc1的时间轴上加一句

_parent. ScrollBar =This.ScrollBar

把路径指向改写,达到我们要使用的模式,ScrollBar就是BlogDairy的直接成员。另外我没有语句初始化mc,我习惯在库里设置mc的linkage。

备注:虽然组合模式是每个人必不可少要用的,但正因为如此,我们可以想出他更多更好更灵活的实现方式

(评论功能已被禁用)
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· [AI/GPT/综述] AI Agent的设计模式综述
点击右上角即可分享
微信分享提示