Zdaję sobie sprawę, że ten temat został zabity na śmierć, ale wciąż walczę i mogę zrobić z jakąś konkretną pomocą.Luźno sprzężony wzór obserwatora
Moim celem jest zaimplementowanie prostego wzorca obserwatora między jakimś obserwowalnym (powiedzmy psem) a jakimś słuchaczem (powiedzmy Właściciel).
Ostatecznie właścicielem będzie "widok", a pies "modelem" w paradygmacie MVC. Używam Psa i Właściciela tylko po to, aby uprościć rzeczy tutaj.
Próbowałem użyć wbudowanych w Java klas Obserwator/Obserwowalny, ale zdałem sobie sprawę, jak źle metoda aktualizacji Obserwatorów() jest - otrzymuje POJO i musiałbym sprawdzić/odrzucić to POJO w metodzie update(). Bardzo chciałbym, aby moja metoda "update()" otrzymywała coś, czego można się spodziewać.
Więc po kilka samouczków, w tym ten jeden, który wykorzystuje Dog/właściciel jako przykład:
http://www.youtube.com/watch?v=qw0zZAte66A
Tu zostały pokazane jak toczyć własne Observer/odnotowano klas. W pseudo kod, co mam teraz jest to:
Dog/Model {
List listeners;
public fireDogHungryEvent() {
foreach listener {
listener.onDogHungry(this);
}
}
public fireDogPeeEvent() {
foreach listener {
listener.onDogNeedsToPee(this);
}
}
public getHungerLevel() { return hungerLevel; }
public getBladderCapacity() { return bladderCapacity; }
}
Owner/View {
public onDogHungry(model) {
println(model.getHungerLevel());
}
public onDogNeedsToPee(model) {
println(model.getBladderCapacity());
}
}
Więc teraz zamiast jednego metoda update(), mam metody, które zajmują szczególne wydarzenia. Znakomity. Obecnie jestem zadowolony z klasy Właściciel/widok. Wie o metodach Dog/Model i to jest w porządku (myślę).
Nie podoba mi się to, że pies/model ma odniesienia do metod w widoku Właściciel/widok. Czytałem niezliczoną ilość razy i całkowicie zgadzam się, że model nie powinien być ściśle powiązany z jego poglądami, tak jak wydaje się być powyżej. Nie jestem również zainteresowany wszystkimi metodami "ognia" u psa/modela, robiąc prawie to samo; zapętlając wszystkich słuchaczy i po prostu wywołując inną metodę na każdym słuchniku.
Czy możliwe jest dalsze rozłączenie tych zależności i czy nie są dostępne specjalne metody dla psów/modeli? Jeśli tak, jaki jest najlepszy sposób uzyskania danych Dog/Modelu do właściciela/widoku i poprawnej pracy z nim?
Dzięki
Jakie metody "psa" mają odniesienia do widoku? Nie widzę żadnych. – SJuan76
Najlepszym sposobem jest użycie interfejsu, który sugeruje samouczek wideo. Czy słuchacz jest interfejsem w twojej implementacji? –
SJuan76 - referencje, o których mówię, to połączenia do listener.onDogHungry i listener.onDogNeedsToPee w metodach "ognia" psa. – whoshotdk