1.一个模块可能有多个实例;各个模块之间,尽量不要有对内部实例的持有引用。只会有对整体模块的持有,需要什么从该模块获取。
2.特殊情况:一般特殊情况都是需要从性能上考虑,因为不持有后,可能会因为重新索引等缘故导致性能下降。
什么时候可以对模块的实例持有?
当模块的实例已经定性,不会增加减少或修改时,别的模块可以这样持有。
如果该模块可能会无限扩展,那么外部不要持有它内部的对象。
3.例:
模块1:状态机系统
模块2:技能系统
模块3:buff系统
模块4:数值系统
1.状态机自己内部实现自己的逻辑,不应该持有任意一个独立的技能引用,以及任意一个独立的buff引用。
需要什么状态从SkillManager和BuffManager获取。
2.外部也不应该干涉状态机的状态变化,应该是自己获取状态/监听事件,模块内部闭环。
3.获取的内容不应该是无限扩增的,需要是有限类别的组合。如无必要勿添实体。
但是可以持有数值系统对象的引用:比如说一个数值表示血量,是一个class Value(string attrID ="血量")。
数值系统不管怎么修改内部数据,都不会清除这个对象,那么就可以持有这个索引。
因此:Buff不应该直接去改变别的系统。可以改变自身状态,或者发送事件。Buff系统内部需要闭环。
网友评论