gpt4 book ai didi

java - 访问当前对象所属的对象

转载 作者:行者123 更新时间:2023-12-01 13:47:16 25 4
gpt4 key购买 nike

这似乎是一个很容易解决的任务,但我仍然找不到方法。

假设我有两个类

class Grid {
private Square[][] sq;
public Grid(){
// don't like this
seq[0][0] = new Square(this);
// etc.
}
public Collection<Square> getNeighbours( Square sq ){ ... }
public boolean isFull(){ ... }
}

class Square {
private Grid grid;
Set<Worker> set;
public Square(Grid grid){
this.grid = grid;
set.add(new Worker(this));
}
public void dealWithNeighbours(){
for( Square s : grid.getNeighbours()) {....}
}
public boolean isGridFull(){
// now it is officially stupid
return grid.isFull();
}
}

当我向其中添加新层时,情况会更糟,例如:

 class Worker extends Thread{
private final Square sq;
public(Square sq){
this.sq = sq;
}
private boolean anyMoreFreeSpace(){
!sq.isGridFull();
}
@Override
public void run(){
if( anyMoreFreeSpace () ) { ... }
...
}

}

现在的问题是,每次我需要启动一个新的 Square 对象时,我还必须提供对其调用对象的引用。因为 Square 不拥有任何有关其周围环境的信息。当我需要一些有关主要最高所有者的信息时,情况会变得更糟。然后我必须将各层相互链接,就像 isGridFull() 的情况一样。

在实际代码中,我有 3 个级别的此类依赖关系,而且它已经变得非常困惑。我想知道处理这种情况的好方法。正确的设计是什么?

最佳答案

我同意@Robin,为什么你不直接告诉方 block 他们的邻居呢?

如果你有理由就不要告诉他们,所以我希望接下来的内容对你有帮助)

当你希望依赖关系变弱时,你需要引入新的抽象级别,其中包含有关GridSquareWorker的所有信息。前三个类可以互相了解任何事情。据我了解,你已经有了这样的抽象级别:一些“主要的最高所有者”。

因此,让Owner了解所有内容,并让GridSquareWorker转储。

public class Owner {
//structure that store grid, all related squares and all related workers
private Grid grid;
private Map<Square, Collection<Worker>> squareWorkerMap;

public Grid getGrid() {
return grid;
}

public Collection<Square> getAllSquares() {
return squareWorkerMap.values();
}

public Collection<Worker> getWorkers(Square sq) {
squareWorkerMap.get(sq);
}

public ??? getSquare(Worker worker) {
//implementation depends on if worker can belong to many squares
}
}

public class Grid {
private Owner mainTopOwner;

public Collection<Square> getSquares() {
return mainTopOwner.getAllSquares();
}
public Collection<Worker> getWorkers(Square sq) {
return mainTopOwner.getWorkers(sq);
}
}

public class Square {
private Owner mainTopOwner;

public Collection<Workers> getWorkers() {
return mainTopOwner.getWorkers(this);
}
public Grid getGrid() {
return mainTopOwner.getGrid;
}
}

public class Worker {
private Owner mainTopOwner;

public Square getSquare() {
return mainTopOwner.getSquare(this)
}
public Grid getGrid() {
return mainTopOwner.getGrid;
}
}

关于java - 访问当前对象所属的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20270466/

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