gpt4 book ai didi

arrays - 使用在大多数情况下只有一个元素的向量/列表是一种浪费/糟糕的设计吗?

转载 作者:行者123 更新时间:2023-12-04 18:53:07 25 4
gpt4 key购买 nike

使用在大多数情况下只有一个元素的向量/列表是一种浪费/糟糕的设计吗?

例子:

class dragon
{
ArrayList<head> = new ArrayList<head> Heads;
tail Tail = new tail();
body Body = new body();

dragon()
{
theHead=new head();
Heads.add(theHead);
}

void nod()
{
for (int i=0;i<Heads.size();i++)
{
heads.get(i).GoUpAndDown();
}
}
}

class firedragon extends dragon
{
}

class icedragon extends dragon
{
}

class lightningdragon extends dragon
{
}

// 10 other one-headed dragon declarations here


class hydra extends dragon
{
hydra()
{
anotherHead=new head();
for (int i=0;i<2;i++)
{
Heads.add(anotherHead);
}
}
}

class superhydra extends dragon
{
superhydra()
{
anotherHead=new head();
for (int i=0;i<4;i++)
{
Heads.add(anotherHead);
}
}
}

编辑:(问题的第 2 部分)

感谢您的回复。他们非常有帮助。
我实际上不止一次遇到过这种情况,我想再举一个与继承无关的例子。这实际上是一个真实世界的例子,虽然我已经决定我当前的项目规模足够小,可以根据你的答案使用向量是安全的,但我想我会在更大范围内使用这个概念观点。

在为我当前的 Android 游戏项目创建引擎时,我发现有必要创建一个 Imagepoint 对象,该对象基本上是一组用于跟踪 Sprite 图像重要部分的 XY 坐标。假设您有一个由多个位图组成的骨骼角色,了解颈部与躯干的连接位置、前臂与二头肌的连接位置等很有用。此 xy 偏移数据稍后用于出于各种目的计算位置,例如位置通过使用三角函数找到给定当前角度的 xy 偏移来定位其他 Sprite 。

大多数 Sprite 对象只需要一个图像点。二头肌需要一个用于前臂,前臂需要一个用于手,颈部需要一个用于头部,等等。我目前的角色模型中的躯干是个异常(exception),它们需要几个用于肩部、腿部、颈部,以及任何可移动的装饰 Sprite 。

sprite 是包含 imagepoint 向量的对象,不会有继承类,因为每个:躯干、腿等只是 sprite 类的一个实例,严格来说是一个图形对象,包含指向位图的指针,这些图像点和各种位置/方向数据,不会用于任何特殊目的。如果我要在具有大量实例的大型游戏中使用这个概念,其中大多数只需要一个图像点,少数对象需要多个或不需要,并且没有值得使用继承的特殊情况。你的想法是什么?

最佳答案

是和否。

我的意思是你的问题真的取决于你将如何使用这些对象..我个人喜欢尽可能地拆分行为和属性,以根据它们代表的对象类型来“聚类”它们,而不用关心重用一些代码与您提出的真正继承方法相比,要少一些。就像是:

interface BigLizard
{
void nod();
}

class Dragon implements BigLizard
{
Head head;

void nod() { head.upAndDown(); }
}

class ReallyScaryDragon extends Dragon { ... }

class Hydra implements BigLizard
{
ArrayList<Head> heads;

void nod() { for (Head h : heads) h.upAndDown(); }
}

等等。这种方法就像“拥有您的对象所需要的东西,而不必强制任何事情成为特定情况”。当然,这意味着它会有两种不同的 nod() 实现。但是当你不需要优化(你应该只在最后关心它)时,只要坚持你的个人偏好,假设它不违反任何标准的、广泛接受的约定。

您不必从单个对象继承任何内容,只需根据需要自定义层次结构......如果“头部”的概念对于您的 Dragon并为您的 Hydra ..

针对您的特定情况的第三种解决方案可能是使用 LinkedList取而代之的是一个 ArrayList .在这种情况下,只要您只有一个头,您就不会浪费空间(列表的实例化除外)并且您将只有 next头部(列表 :D )的指针无处指向。

关于arrays - 使用在大多数情况下只有一个元素的向量/列表是一种浪费/糟糕的设计吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3034289/

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