Eventy_a_wzorzec_obserwator

Event-y a wzorzec obserwator

27 grudnia, 2023
Czy myślisz o rozpoczęciu nauki na temat event-ów w nie tylko Spring Boot? Zastanawiasz się co wspólnego mają event-y ze wzorcem obserwator? To świetnie – ten artykół odpowie Ci na to i inne pytania :). Jeśli dodatkowo interesuje Cię tematyka wzorców, to w jednym z poprzednich artykułów znajdziesz informacje na temat wzorca „Adapter”. Jeśli chcesz przecztać wersję angielską artykułu: Events and the Observer pattern

1. Wzorzec Obserwator

Wzorzec obserwator jest jednym z behawioralnych wzorców projektowych, w którym obiekt obserwuje stan innego obiektu i reaguje na tę zmianę. Zmiana stanu to nasz wyczekiwany event. Innymi słowy, wzorzec obserwator jest dobrze znaną (niezależna od języka programowania) i prostą w użyciu metodą przesyłania wiadomości. W metodzie tej obiekt zna swoich obserwatorów.
obserwator-ogólny poglądWzorzec obserwator – ogólny schemat. Źródło rysunku: https://refactoring.guru/design-patterns/observer
Publisher/Observable posiadają listę Subscribers/Observers i wie również, którym obiektem obserwujący są zainteresowani.(Zamieściłam tutaj różne nazwy jak Publisher czy Subscriber, ponieważ ucząc się dalej o eventach zobaczymy, że w podobny sposób funkcjonuje wzorzec pub/sub. Jednak pomimo zmiany nazw Observable na Publisher, czy Observers na Subscribers wciąż mamy do czynienia z eventami. Haczykiem, na który trzeba uważać to, czy dany wzorzec pracuje na jednym, czy na kilku wątkach. Jednak o tym w późniejszych artykułach :). ) Podając przykład, odniosę się do kanałów YouTube’a i obserwujących konkretny kanał. Nasz Observer wie, że np. subskrybent Karol jest zainteresowany kanałem: „Classic Rock Music”. Natomiast Iwona jest zainteresowana kanałem: „Joga with Kasandra”. Tak więc powiadomienia o dodaniu nowego filmu na temat jogi trafią tylko do Iwony. Karol zaś otrzyma informacje o nowych filmach tylko na temat „Classic Rock Music”. Ponadto obserwujący mogą rozpocząć śledzenie wybranego kanału, jak i przestać go obserwować w dowolnym momencie. W samej Javie przykładowy schemat działania wygląda następująco:
Przykładowy schemta działania obserwatora w czystej Javie. Żródło: własne

2. Kiedy warto go użyć?

Obserwatora warto użyć, gdy chcemy wymienić informacje pomiędzy komponentami w jednej aplikacji. Trzeba tutaj pamiętać, że wzorzec obserwator w czystej postaci jest synchroniczny. A więc wszystko odbywa się na jednym i tym samym wątku. Co więcej, wzorzec ten może być wykorzystywany w aplikacjach back-endu, jak i front-endu.

3. Podsumowanie

Podsumowując, analizując schemat działania zamieszczony powyżej pokazuje, że wzorzec obserwator jest zgodny z zasadami SOLID. Chodzi tutaj dokładnie o zasadę „Open close principle”. W implementacji, gdzie obserwowany i obserwujący są interfejsami łatwo i bez zakłóceń możemy dodawać i usuwać subskrybentów i publisher-ów. Trzeba pamiętać, że wzorzec ten jest synchroniczny. Jednak to na jego podstawie działają eventy w Spring Boot. Co więcej, Spring Boot pozwala na zmianę eventów synchronicznych w asynchroniczne. Z drugiej jednak strony obserwujący są powiadamiani o zmianie stanu w losowej kolejności. Ponadto nie mamy pewności, że obiekt posiada obserwującego, który nasłuchiwałby, kiedy zmiana stanu się wykona.

Leave a Comment

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *