Kiedy pracowałem nad moim projektem i musiałem używać wielu obiektów zagnieżdżonych, stałem się bardzo niepewny mojego projektu struktury w Javie, gdy chciałem ustawić zmienną instancji głęboko zagnieżdżonego obiektu z górnego obiektu. Czuję, że brakuje mi podstawowej wiedzy na temat strukturalnego projektowania w Javie. Wgląd w to jest doceniany.Konstrukcja java: powtarzające się metody podobiektów
Wyobraź sobie, że mam obiekt, który ma logiczną strukturę posiadania zagnieżdżonych obiektów podrzędnych jako zmiennych. Na przykład:
Country
Capital
Palace
King
Jeśli teraz chcesz ustawić private String zmiennej „nameOfKing” King od głównego obiektu (kraju), to muszę definiować każdą metodę we wszystkich wyższych klas Króla. Tak więc coś takiego:
public class Country {
private Capital capital;
public void setNameOfKing(String n) {
capital.setNameOfKing(n);
}
}
public class Capital{
private Palace palace;
public void setNameOfKing(String n) {
palace.setNameOfKing(n);
}
}
public class Palace{
private King king;
public void setNameOfKing(String n) {
king.setNameOfKing(n);
}
}
public class King{
private String nameOfKing;
public void setNameOfKing(String n) {
this.nameOfKing = n;
}
}
dzięki czemu mogę zadzwonić pod numer country.setNameOfKing(n);
. Teraz jest dobrze, jeśli masz tylko kilka zmiennych, ale co jeśli klasy King, Palace, Capital mają wiele innych zmiennych i metod zdefiniowanych i wszystkie z nich muszą być wywołane z kraju. Co jeśli Palace zawiera również inne obiekty klasowe, takie jak (teraz tylko tworzenie rzeczy) ThroneRoom, Treasury, Queen itp. Oznaczałoby to, że dla prawie wszystkich metod w podklasach, musi istnieć klasa Country, która mogłaby potencjalnie oznacza, że musisz stworzyć olbrzymią ilość metod po prostu do przekazywania informacji do obiektów podrzędnych, co prowadzi do bardzo dużej klasy Kraj.
Przypuszczam, że technicznie można powiedzieć, że króla można również określić w samym kraju, rezygnując z dodatkowych metod w Pałacu i Kapitale, ale nadal oznacza to, że metody muszą istnieć w klasie Kraj, a jeśli struktura ta ma sens w zgrupowanych logikach, jakie byłoby najlepsze podejście do tego? Nie jestem pewien, czy jest lepszy sposób, ale nie mogę otrząsnąć się z tego, że coś tu pomijam.
tak 'getPalace(). SetFoo()' nie jest opcją? –
Masz na myśli zmianę metid w klasie Country w ten sposób? 'capital.getPalace().setNameOfKing (n); 'To zmieniłoby fakt, że możesz potencjalnie mieć wiele metod w klasie Country – lokipoki