gpt4 book ai didi

typescript - 引用同一类的组合和聚合 (UML/TypeScript)

转载 作者:搜寻专家 更新时间:2023-10-30 21:37:50 25 4
gpt4 key购买 nike

Hero 有聚合和组合关系是否可能,是否有意义?

我的目标是为每个英雄保留一份权力列表,但是在创建一个权力时,应该只能添加一个权力而不是多个权力。这就是为什么我只为一个力量创造了一个私有(private)属性力量的原因。

我的问题是关于 UML 类图的有效性。这是表达我的意图的正确方式吗?

power 是一个聚合的原因是它可能是另一个类使用相同的 power 实例(我已经实现了一些缓存,它总是返回相同的 power 实例,为简单起见我没有显示那部分)。

powers 之所以是一个组合,是因为它强烈依赖于英雄实例。如果英雄被摧毁,权力也应该被清理。

Hero UML Composition, Aggregation

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);
}

}

电源.ts

export class Power {
constructor(private title: string) { }
}

最佳答案

首先:可以在两个类之间进行聚合和组合。正如你所说的正确,如果我们的part class应该用whole class删除,我们应该使用Composition,如果不是,我们可以使用Aggregation(或Association)。有可能两者都在一个方向上(正如你所拥有的,只有递归关系是不可能的)

根据你的解释:

My aim is to keep a list of powers for each hero, however when creating one it should only be possible to add one Power instead of multiple Powers. That is the reason why i've created a private attribute power for only one power.

没有HeroPower 之间的聚合。那只是 它们之间的依赖关系。根据您的代码和解释,您没有在代码中保存ONE power,仅用于将实例设置为Hero中的POWERS。这意味着您的 Hero 没有任何单一的 Power 作为 part class


但是,你在他们之间的作文是绝对正确的。因为你说:

it strongly depends on the hero instance. If hero is destroyed, powers should also be cleaned.

关于typescript - 引用同一类的组合和聚合 (UML/TypeScript),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48316431/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com