Java-在独立类中的两个变量之间创建一致性



我有三个类——User、Floor和Directory。

目录保存/创建多个静态Floor对象。

每个用户对象以及其他信息都需要知道它们在哪个楼层

每个楼层以及其他信息都需要知道什么是用户。

我想做这样的事情:

public class Directory{
public static Floor floor1 = new Floor(3);
public static Floor floor2 = new Floor(3);
class Floor{
private User[] users;
private Floor(int allowedUsers){
users = users[4];
}
public boolean addUser(User toAdd){
// if there is a free slot on floor, add User
for(int i = 0; i < users.length; i++){
if(users[i] == null){
users[i] = toAdd;
return true;
}
}
return false;
}
....(other Floor methods)....
}
}

使用这样的用户类:

public class User{
private Floor floor;
public boolean setFloor(Floor floor){
// some code here
// returns true if floor successfully added
}
....(other User methods)....
}

问题:我希望确保我的"用户"one_answers"楼层"对象所持有的信息始终相互一致,以便所有用户都知道他们所在的楼层,所有楼层都知道他们所属的用户。要做到这一点,二传手们需要互相打个电话。如何在不创建无限循环的情况下做到这一点?这似乎是一个常见的问题,我认为有一个标准的格式,但我不知道它是什么

一个选项是有一个单独的类来表示用户的位置——地板和用户之间的关系

该类可以是Directory本身,也可以是Directory拥有其实例的新类。

public class LocationMap {
private Map<Floor,Set<User>> = new HashMap<>(); 
private Map<User,Floor> = new HashMap<>();
public @CheckForNull Floor getFloorOf( @Nonnull User user ) { ... }
public @CheckForNull Set<User> getUsersOn( @Nonnull Floor floor ) { ... }
...
}

以上集合要求在Floor和User上定义equals()hashCode()。或者,可以使用楼层ID和用户ID。

如有必要,楼层和用户可以共享对LocationMap的引用。或者,如果只有这些类外部的代码需要定位用户,则可以直接通过LocationMap进行定位。

最新更新