gpt4 book ai didi

java - 在 Java 中将对象从一个位置移动到另一个位置

转载 作者:行者123 更新时间:2023-11-30 06:44:00 25 4
gpt4 key购买 nike

这是我发现很难研究的东西,因为它需要一些解释。

我基本上想了解在其他对象周围移动对象并跟踪所有对象位置的最佳方式。请允许我解释一下..

假设我们正在创建一个 Person 类和一个 Park 类。公园类有一堆玩具和游乐设施供人们玩耍。这些可能是滑梯类、跷跷板类等。但是假设我们的程序需要始终跟踪 Person 对象的位置。如果他们在幻灯片上,我们将要询问人员类别他们的位置。例如……

//location could be set in the person whenever we move them..
person.setLocation(slide);
//now getLocation could return the object they are on (slide, seesaw, ect)
person.getLocation();

但是现在假设我想弄清楚在任何给定时间公园中的幻灯片对象上都有谁。会是这样的……

slide.getOccupants(); // could return the objects that are on the slide (Persons)

但是现在这意味着当这个人在公园里从一个物体移动到另一个物体时。我不得不说类似...

person.setLocation(seeSaw);
slide.removeOccupant(person);
seeSaw.addOccupant(person);
//this would get annoying and scary to do everytime a person moves...

那么创建一个方法来处理所有这些变化是否可行?例如,每当一个人移动时,它可以调用此代码...

//person being who you're moving and the ride being where you're moving them to..
public void move(Person person, Ride ride){
person.getLocation().removeOccupant(person);
person.setLocation(ride);
person.getLocation().addOccupant(person);
}

我忍不住觉得有更好的方法来做到这一点,因为它感觉在更大范围内变得困惑。也许我想得太多了,但我很想知道这方面的任何最佳实践或设计。

谢谢。

最佳答案

根据 函数式编程 的人,您遇到了一个真正的 OO 问题。作为一个纯粹的 OO 驱动的世界,不允许让您以一致的方式来表示这个问题。无论您如何操作,您最终都会遇到以下三种可能性之一:

  • X 人不在
  • X 人在两个地方
  • 你不知道 X 在哪里

所以这里真正的问题是你有多个对象,移动位置会改变整个系统状态。没有线程一切都很好,但是一旦有多个线程启动,不同的线程可能会看到不一致的状态。

因此,FP 人员告诉您,您首先需要解决该概念性问题,方法是使用一个函数 将系统从一个有效状态“移动”到另一个有效状态。非常类似于您的 move() 代码,但在使用该方法时不会不一致地更新“对象状态”。

好的,但这可能不是您要的。您的问题的一个答案是:将移动一个人视为一项服务。您有实体(人员、位置),并且该服务负责“移动”事物。

猜猜看:那么您的第一个实现就是一个好的开始。所以,实际上,对于一个“教育”项目,你做得很好。可能你应该考虑使用合适的接口(interface)(抽象被移动的“事物”的细节,或者它们移动的地方/到的地方)。将其放入特定的服务类中,然后从那里开始工作。

关于java - 在 Java 中将对象从一个位置移动到另一个位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51404191/

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