解决这个问题看起来相当容易,但我仍然无法找到一种方法。访问当前对象是其中一部分的对象
说我有两个班
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对象,我也必须给它的调用对象提供一个引用。因为广场没有任何关于周围环境的信息。当我需要关于主要业主的一些信息时,情况会变得更糟。然后,我必须将图层链接到对方,例如isGridFull()
。
在真实的代码中,我有3级这样的依赖关系,它已经变得非常混乱。我想知道处理这种情况的好方法。这将是什么正确的设计?
传递'this'是处理它的正确方法。尽管一般情况下,如果事情需要访问其拥有者的所有者,设计可能需要重新考虑。 –
@ayan ahmedov,我的回答对你有帮助吗?如果不是,请提供更多详细信息或对其原因进行评论。我仍然可以尝试帮助你解决这个问题。 –