我只是想知道使用特征来构建游戏对象在语义上是否正确。一方面,我将其视为具有关系(对象具有组件),但另一方面,我将组件视为构成对象。
例如。你有一个游戏对象。一个游戏对象本身几乎什么都不做,但是你混入其中的东西赋予了它额外的属性。组件可以是 HealthComponent(有生命值)、PhysicsComponent(模拟物理)、ClickableComponent(可以点击)。
我喜欢使用特征的想法,因为所有属性和方法都添加到原始对象上,我可以player.getHP
代替player.getHealthComponent.getHP
. 另一方面,我发现使用特征的命名和语义很奇怪。trait HealthComponent extends GameObject
- 这没有意义。AHealthComponent
属于 GameObject,它不满足is隐含的关系extend
。我是否正确假设特征通常被视为其父类的特殊版本?如果是这样,我将如何命名类似上述对象的名称?