Wpis z mikrobloga

W jaki sposób najlepiej połączyć dwie klasy które używają wzajemnie swoich metod i w trakcie działania programu mogą się zmieniać. Chciałbym aby podczas łączenia jednej z drugą (jak w przykładzie) np.: a.setB(b); lub b.setA(a) nowy podłączany obiekt b rozłączył się z wcześniej używanym przez siebie i w druga stronę: a, przed podłączeniem z b, powinien rozłączyć swoje wcześniejsze powiązanie. Moje próby kończą się na wzajemnych rekurencjach i błędach typu StackOverflow. Może jest jakiś pattern na to?

class A {
B b;
setB(B b) {
... // ?
}
}

class B {
A b;
setA(A b) {
... // ?
}
}

#java #programowanie
  • 9
@filozof900: Mam generyczny sposób na wiązanie dowolnych obiektów i dodatkowo same odłączają poprzednio powiązane obiekty. Musiałbym ten twój sposób przemyśleć i przetestować ale chyba nie sprząta poprzednich powiązań
@sheeple: jestem pewien ze nie potrzebujesz zmiennych:

final Class friendClass;
final Class ownerClass;

Straszny kawałek kodu wyprodukowałeś ;-)
Część null checków jest zupełnie zbędna, np w else if (null == gdy wcześniej miałeś if (null != . (if w linii 35 będzie zawsze spełniony, bo nie wszedłeś w warunek linii 28.)

To co robisz, poza walorem edukacyjnym wydaje się błędogenne w dosyć ciekawy sposób. W środowisku wielowątkowym, gdyby twój kod wykonać
Część null checków jest zupełnie zbędna, np w else if ...


@draxgar: Chyba tylko ten jeden ale celowo go tam zostawiłem bo pomagało mi zapamiętać gdzie jestem ( ͡° ͜ʖ ͡°). Posprzątam to jeszcze. A te 2 klasy są tylko po to bo utrzymanie tego pozwala aby jeden obiekt miał wiele różnych powiązań, jak w moim przykładzie: klasa Controller "przyjaźni się" z Mouse i Camera