Skip to content

组合模式

简述

组合模式,在我的理解下 —— 将若干职责拆分成最小单位,即组件。然后把若干组件进行内聚,就出现了实体(GO)

比如 Player,由

  • 血量
  • 攻击
  • 武器
  • 魔法 等组件共同组成。 再如 Enemt,可以是
  • AI
  • 移动
  • 攻击
  • 血量 等组件构成。 所以那些血量等都是最小单位,可以被抽成组件,这样在“组合优于继承”的思想指导下,可以组成各式各样的实体,同时,在进行拓展和测试的时候也可以不用考虑是否会动到其他组件和实体的逻辑,非常方便于简洁。

接着,在标记是否是敌人等的时候,可以再构建一个Tags系统,或者其他什么,但是在组合模式之下,可以简单的创建一个空组件PlayerComponentEnemyComponent来区分玩家和敌人,不用再去想新的逻辑,十分的好用,统一了风格,简化了代码逻辑。

但是这和ECS中提到的C Component又略有不同,ECS中的组件,是单传的数据的集合,所有的逻辑,包含计算等都是推送给系统做的

课程所说

课程中,说到组件之间的通信是麻烦的。但是窃以为,组件之间就不应该有依赖关系,在最小单位之间进行通信有违背解耦的设计理念。 如果需要组件间通信,这个应该是对组件进行内聚的时候做的—— 比如 Player 被攻击的时候,受到伤害的逻辑、通知 UI 更新的逻辑等 应该放在PlayerController中,或者什么高层点的层上,这样才能解耦各个Block

Released under the MIT License.