是否有可能并且Hero是否具有聚合和组合关系是否有意义?
我的目标是保留每个英雄的权力列表,但是在创建一个时,它应该只能添加一个Power而不是多个Powers。这就是我为一个电源创建私有属性的原因。
我的问题是关于UML类图的有效性。这是显示我打算的正确方法吗?
电源是聚合的原因是它可能是另一个类使用相同的电源实例(我已经实现了一些缓存,总是返回相同的电源实例,为简单起见,我没有显示该部分)。
权力是一个组合的原因是它强烈依赖于英雄实例。如果英雄被摧毁,也应该清除权力。
UML的代码看起来像那样(TypeScript):
hero.ts
$conn = pg_connect($connStr)
power.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);
}
}
答案 0 :(得分:2)
首先:可以在两个类之间进行聚合和组合。正如您所说的那样,如果我们的part class
应该用whole class
删除,我们应该使用Composition,如果没有,我们可以使用Aggregation(或Association)。可以在一个方向上进行(如您所知,只有递归关系是不可能的)
根据您的解释:
我的目标是保留每个英雄的权力列表,但 时 创建一个只能添加一个Power而不是 多个权力。这就是我创建私人网站的原因 仅为一种力量赋予权力。
您不在Hero
和Power
之间进行汇总。那只是
它们之间的依赖关系关系。根据您的代码和说明,您不会在代码中保存 ONE power ,而只会在POWERS
中将实例设置为Hero
。这意味着您的Hero
没有任何单Power
为part class
。
然而,您之间的构图绝对正确。因为你说:
它强烈依赖于英雄实例。如果英雄被摧毁,权力 也应该清理。
答案 1 :(得分:0)
解决方案: http://www.google.com/ig/calculator?hl=en&q=
在TypeScript中,最好不要实例化Power类型的属性,因为它没有其他用途。因此构造函数只需获得一个Power并将其添加到powers数组中。
hero.ts
import { Power } from './power';
export class Hero {
powers: Power[] = [];
constructor(power?: Power) {
if (power) {
this.addPower(power);
}
}
addPower(power: Power) {
this.powers.push(power);
}
}