【发布时间】:2018-06-27 05:43:26
【问题描述】:
Hero 是否有可能具有聚合和组合关系,是否有意义?
我的目标是为每个英雄保留一份能力列表,但是在创建一个英雄时,应该只能添加一个能力而不是多个能力。这就是为什么我只为一种力量创造了一个私人属性力量的原因。
我的问题是关于 UML 类图的有效性。这是表达我意图的正确方式吗?
power 是一个聚合的原因是它可能是另一个类使用相同的 power 实例(我已经实现了一些缓存,它总是返回相同的 power 实例,为简单起见,我没有展示那部分)。
powers 是一个组合的原因是它强烈依赖于英雄实例。如果英雄被摧毁,力量也应该被清除。
UML 的代码确实看起来像这样(TypeScript):
英雄.ts
import { Power } from './power';
export class Hero {
powers: Power[] = [];
constructor(private power?: Power) {
if (power) {
this.addPower(power);
}
}
addPower(power: Power) {
this.powers.push(power);
}
}
power.ts
export class Power {
constructor(private title: string) { }
}
【问题讨论】:
-
在stackoverflow.com/questions/48268986/… 上查看我的答案,尽管目前那里的 OP 正在拖钓:-/
-
你的力量列表是固定给所有英雄还是每个英雄都可以使用不同的力量?
-
嗨,@1 所以你说我应该更好地使用多重关联而不是聚合和组合? @2 每个英雄都应该拥有不同的能力
-
是的,在几乎所有情况下,多重性都是更好的选择。并且省去了很多麻烦。
-
与其用答案编辑您的问题,不如将其发布为新的“对自己的答案”。那将是完美的。
标签: typescript uml