CEGUI::PropertySet赏析

 

CEGUI::PropertySet赏析  

     CEGUI:: PropertySet是CEGUI中一个设计非常优秀的重要组件。PropertySet内部通过std:: map< String,  Property>将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动态属性集的设计。

你可能感兴趣的:(数据库,String,layout)