0

如果这个地方不是合适的地方,请在结束问题之前指出我可以在哪里讨论/解决我的疑问。

这是一件小事,我已经有一段时间了。在 Java 中,也许还有其他 OOP 语言,有什么会更好……

class Entity {
  [final] int xPos;
  [final] int yPos;

  // ...
}

更确切地说...

class Entity {
  Position p;

  // ...
}

class Position {
  [final] int x;
  [final] int y;
}

这有什么好处和坏处?对我来说,采用第二种方法似乎更实用,特别是当您需要输入两个属性作为方法参数或返回值时,但我也在考虑这是否会产生太多不需要的过程(为小事创建新对象) ...

4

3 回答 3

2

或者您不能编写自定义类并使用Point. 真的取决于你。如果您需要执行涉及坐标的计算,或者需要大量传递对象的坐标,那么最好将它们包装在一个对象中以使您的代码更简单。如果它们是恒定的,并且永远不会改变(你永远无法真正知道),那么你可以将它们作为int值保留。

于 2013-05-11T15:01:55.567 回答
2

如果它代表具有独立目的的东西,您只需要一个单独的类定义 - 所以将来可能需要在其他地方或包含独立的功能(责任划分)。正如克里斯提到的那样,您的示例与 Point 类直接相关,因此后者更合适。

于 2013-05-11T15:10:10.307 回答
1

两者都不。最好的设计如下:

class Position {
    final int x;
    final int y;
}

interface Positionable {
    Position getPosition();
}

class Entity implements Positionable {
    private Position p;
    public Position getPosition() {
        return position;
    }
}

推理:

  • 允许Position进化 - 也许你想添加一个z坐标
  • 允许Position不可变
  • 允许Position在没有被包含在较重物体中的包袱的情况下四处传递
  • 允许您自由添加方法Position,例如float distanceFrom (Position p)
  • 允许Position比它描述的对象更长寿
  • 允许其他类轻松获得Position
  • 尽可能多地解耦各种关注点

请注意,它Point是可变的,因此从良好的设计角度来看,使用它或扩展它是次要的,因为对于这样的类而言,不变性似乎是一个明智的选择(它被认为Point是可变的错误 - 对于其他“java 中的错误”,请参阅此答案

于 2013-05-11T21:17:11.123 回答