注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

秒大刀 博客

好好学习 天天向上

 
 
 

日志

 
 
 
 

CEGUI::PropertySet赏析  

2011-03-29 15:36:54|  分类: Game |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
    CEGUI::PropertySet是CEGUI中一个设计非常优秀的重要组件。PropertySet内部通过std::map<StringProperty>将Property用String键组织起来。CEGUI::Window等类继承自PropertySet,也就自然拥有了属性集的功能,外部即可通过getProperty、setProperty进行属性设置。

    读CEGUI::Window等的源码会发现,Window将Property子类作为静态字段,而在构造时才通过addProperty将静态属性指针加入到属性集。PropertySet保存了属性值访问代理的集合,通过这些接口可以实现属性值访问。而Property并不存贮属性值,仅为属性值访问代理。属性值保存在PropertySet的子类对象中。PropertySet的子类保存属性的值,同时重新定义了这些值的直观访问接口,避免了必须通过字符串界面的属性集访问造成的性能损伤。

    PropertySet从PropertyReceiver继承,并且Property通过PropertyReceiver进行get、set,这可将Property的属性操作和PropertySet解耦合。Property只需通过PropertyReceiver即可进行属性操作,而无需关注PropertyReceiver是否是一个PropertySet,无需关注Property是否被用在了一个PropertySet中,无需关注属性值保存者是否继承自PropertySet,完全独立了Property和Property的使用者。

    用属性集而不是给对象增加很多字段,可以保持对象接口简洁统一。属性集也可以和对象之间的继承关系很好的配合,子类会自然拥有基类属性集的访问权。属性集很容易让人想起数据库中的表,比起杂乱组织的字段,“表”的概念更容易被理解和接受。

    用户可以在外部添加自定义属性,方便实现功能扩充。甚至可以完全通过配置文件来进行属性扩充。layout文件中的PropertyDefinition就是很好的应用。不用修改任何代码仅通过配置文件就可实现对象字段的动态插接!(“动态属性集”)

    属性集有“自我描述”的功能,可以通过遍历对象的属性集得到其支持的所有属性(有点反射的味道)。这对CELayoutEditor等编辑器的制作非常有用。避免因为要编辑的对象字段调整而导致编辑器必须同步调整。

    欣赏CEGUI动态属性集的设计。

注:本文基于CEGUI-0.7.5

推荐阅读:
  《游戏编程精粹2》1.7 用于通用C++成员访问的属性类。其中谈到动态属性集还可以用来暴露方法,这样可以做到对象方法的动态插接!
  评论这张
 
阅读(1281)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017