Wzorce projektowe – czynnościowe State Mediator
Transkrypt
Wzorce projektowe – czynnościowe State Mediator
WYKŁAD 12 Wzorce projektowe – czynno ciowe State Mediator Behavioral Design Pattern: State [obj] Umo liwia obiektowi zmian zachowania gdy zmienia si jego stan wewn trzny. Dzieki temu obiekt zdaje si zmienia swoja klas . Uzasadnienie: Klasa Poł czenieTCP reprezentuje poł czenie sieciowe. Takie poł czenie mo eby w jednym ze stanów: Nawi zane, Nasłuchiwane, Zamkni te. Gdy otrzymuje dania od klientów powinna zachowywa si w sposób zale ny od aktualnego stanu. Wzorzec State opisuje jak powinna si zachowywa klasa w ka dym ze stanów. Najwa niejsze jest wprowadzenie klasy abstrakcyjnej StanTCP reprezentuj cej stany poł czenia sieciowego. Definiuje ona wspólny interfejs dla swoich podklas, które implementuj zachowanie specyficzne dla stanu. Klasa Poł czenieTCP zawiera w sobie obiekt StanTCP reprezentuj cy bie cy stan poł czenia. Przekazuje ona wszystkie dania zale ne od stanu do tego obiektu (do obiektu podklasy). Przy zmianie stanu obiekt Poł czenieTCP zmienia u ywany przez siebie obiekt reprezentuj cy stan. Stosowalno : • zachowanie obiektu zale y od jego stanu, a obiekt musi zmienia swoje zachowanie w czasie wykonywania programu w zale no ci od stanu • operacje zawieraj du e wielocz ciowe instrukcje warunkowe, które zale od stanu obiektu Struktura: Uczestnicy: • Kontekst (Poł czenieTCP) – definiuje interfejs dla klientów – utrzymuje egzemplarz podklasy StanuKonkretnego, definiuj cy bie cy stan • Stan (StanTCP) – definiuje interfejs do kapsułkowania zachowania zwi zanego z okre lonym stanem Kontekstu • StanKonkretny (TCPNawi zane, TCPNasłuchiwanie, TCPZamkniete) – ka da podklasa implementuje zachowanie zwi zane ze stanem Kontekstu Współpraca: • Kontekst deleguje dania specyficzne dla stanu do bie cego obiektu StanKonkretny • Kontekst mo e przekazywa siebie samego jako argument do obiektu Stan obsługuj cego danie – stan ma dost p do Kontekstu • Kontekst jest podstawowym interfejsem dla klientów; Klienci mog konfigurowa Kontekst za pomoc obiektów Stan; pos konfigurowaniu ju si nie zajmuj stanem • o tym który stan nast puje po którym i kiedy mo e decydowa Kontekst albo podklasy KonkretnegoStanu [maszyna stanów w UML] Konsekwencje: • umiejscowienie zachowania specyficznego dla stanu i rozdzielenie zachowania w wypadku ró nych stanów • jawno przej mi dzy stanami • mo liwo współdzielenia obiektów Stan Implementacja: • który z uczestników definiuje przej cia miedzy stanami? • alternatywne rozwi zanie polegaj ce na wykorzystaniu tablic • tworzenie i niszczenie obiektów Stan • wykorzystywanie dynamicznego dziedziczenia Przykłady Znane zastosowania Pokrewne wzorce: • Flyweight – wyja nia jak mo na współdzieli obiekty Stan • Singleton – obiekty Stan cz sto s Singletonami Behavioral Design Pattern: Mediator [obj] Przeznaczenie: Wzorzec ten definiuje obiekt kapsułkuj cy informacje o tym jak obiekty współdziałaj . W ten sposób przyczynia si on do rozlu nienia powi za mi dzy obiektami (weak-coupling), gdy sprawia, e nie odwołuj si one do siebie bezpo rednio. Umo liwia te oddzielne zmienianie ich sposobu komunikacji. Uzasadnienie: W projektowaniu obiektowym powstaje zwykle wiele niewielkich klas, których obiekty musz si komunikowa ze sob nawzajem. Prowadzi to do wzrostu zło ono ci komunikacji pomi dzy nimi, a co za tym idzie do komplikacji wzajemnych powi za . Mo e si nawet okaza , e ka dy obiekt musi wiedzie o wszystkich pozostałych. D enie do ponownego u ycia przyczynia si do zwi kszenia zło ono ci, a zło ono komunikacji ogranicza mo liwo ci ponownego u ycia. Przykładem mo e by implementacja okienka dialogowego z GUI zawieraj cego kontrolki. Kontrolki te s zale ne od siebie nawzajem. Np. wybranie czego na li cie mo e spowodowa zmian tekstu w polu edycyjnym oraz wygaszenie jakich kontrolek. Aby ka dorazowo przy implementowaniu kolejnych okienek nie zmienia nieustannie klas reprezentuj cych kontrolki w zale no ci od tego jak si one komunikuj z innymi mo na zbiorcze zachowanie umie ci w osobnym obiekcie – mediatorze. Mediator jest odpowiedzialny wła nie za sterowanie i koordynowanie interakcji obiektów. Wszystkie obiekty znaj mediatora ale nie znaj siebie nawzajem. [zamiana trójk ta w gwiazd ] Mo emy sobie wyobrazi okienko dialogowe zajmuj ce si wyborem czcionki. Rol mediatora mo e wtedy pełni klasa KierownikDialoguWybórCzcionki. Zna on kontrolki i koordynuje ich współprac . Jedocze nie kontrolki wiedz o nim. Dzi ki temu całe zachowanie okienka dialogowego mo na zmieni przez wymian jednej klasy. Stosowalno . • zbiór obiektów komunikuje si w dobrze zdefiniowany ale skomplikowany sposób – nieuporz dkowane i trudne do zrozumienia współzale no ci • utrudnione ponowne u ycie obiektu, gdy komunikuje si z wieloma innymi • zachowanie rozproszone w ród wielu klas powinno by modyfikowane bez definowania ich podklas Struktura: Uczestnicy: • Mediator (KierownikDialogu) – definiuje interfejs porozumiewania si z obiektami Współpracownik • MediatorKonkretny (KierownikDialoguWybórCzcionki) – implementuje wspólne zachowanie przez koordynowanie współpracy obiektów Współpracownik – zna i koordynuje swoich współpracowników • Klasy Współpracowników (ListaRozwijana, PoleEdycyjne) – ka da klasa Współpracownik zna swój obiekt Mediator – ka dy współpracownik porozumiewa si ze swoim mediatoremzawsze wtedy gdy zwykle porozumiewałby si z innym współpracownikiem Współpraca: Współpracownicy wysyłaj komunikaty do obiektu Mediator i otrzymuj je od niego. Mediator implementuje wspólne zachowanie przesył j c dania mi dzy współpracownikami Konsekwencje: • ograniczenie tworzenia podklas – zamiast podklas współpracowników tylko podklasa Mediatora, zatem klasy Współpracowników mo na ponownie wykorzystywa • rozdzielenie współpracowników – rozlu nienie powi za pomi dzy nimi, mo na niezale nie zmienia i ponownie wykorzystywa klasy Współpracownik i Mediator • uproszczenie protokołów obiektów – zamiast wiele-do-wiele mamy jeden-do-wiele, które s łatwiejsze do maintenance’u • uabstrakcyjnienie współpracy – mo na oddzieli to jak zachowuj si indywidualnie obiekty od tego jak wygl da komunikacja • centralizacja sterowania – mediator zamienia zło ono współdziałania na zło ono mediatora, co mo e powodowa trudno w jego utrzymaniu Implementacja: • pomijanie klasy abstrakcyjnej Mediator – je li tylko jeden mediator konkretny • komunikacja współpracownik-mediator – mo e by zaimplementowana z u yciem wzorca Observer (jest nim wtedy Mediator) albo współpracownik mo e przesyła w komunikacie samego siebie Przykłady Zastosowania Pokrewne wzorce: • Facade – tym si ró ni od Mediatora, e wyodr bnia podsystem obiektów i zapenia do niego wygodny interfejs, co oznacza, e tylko on wysyła dania do podsystemu, ale nie na odwrót. W Mediatorze komunikacja jest dwukierunkowa • Observer – współpracownicy mog si komunikowa z Mediatorem w sposób zapewniany przez Observer