解決這個問題看起來相當容易,但我仍然無法找到一種方法。訪問當前對象是其中一部分的對象
說我有兩個班
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,我的回答對你有幫助嗎?如果不是,請提供更多詳細信息或對其原因進行評論。我仍然可以嘗試幫助你解決這個問題。 –