Pakiet programów do zdalnego nauczania Programowania Orientowanego Obiektowo
Dzisiaj jest
Środa, 18 Lipiec 2018
Zarejestrowanych użytkowników: 4
Dostępnych pytań testowych: 102
HOME
Strona tytułowa pracy dyplomowej
NAUKA
Materiały dydaktyczne związane z OOP
TESTY
Sprawdzenie poziomu zdobytej wiedzy
ZASOBY
Literatura i zasoby sieciowe o OOP
ŹRÓDŁA
Zbiór projektów dydaktycznych z OOP
KONTO
Możliwość śledzenia własnych postępów
INFO



Mechanizm dekoratorów

Zasada działania dekoratorów przypomina otaczanie klas. Najpierw tworzony jest pewien komponent konkretny, którego funkcjonalność będzie można dowolnie rozszerzyć. Następnie tworzy się dekoratory konkretne (zawierające dodatkowe funkcjonalności) i opakowuje się nimi wcześniej utworzony komponent. Ponieważ interfejs metody umożliwiającej operację otaczania używa argumentu który jest wskaźnikiem na klasę komponentu abstrakcyjnego operację dekorowania można używać kaskadowo na kolejno utworzonych dekoratorach. Dzięki temu komponenty mogą uzyskać nie tylko jedną, ale wiele funkcjonalności.

W reprezentowanym przez poniższy diagram klas systemie chcemy udekorować obiekt klasy Komponent1 dekoratorami Dekorator1 i Dekorator2.

Proces dekorowania – zgodnie z przedstawionym wyżej opisem – może przebiegać następująco:

  • utworzenie egzemplarza klasy Komponent1,
  • utworzenie egzemplarza klasy Dekorator1 i opakowanie obiektu klasy Komponent1,
  • utworzenie egzemplarza klasy Dektorator2 i opakowanie obiektu klasy Dekorator1.

Jeśli za opakowywanie obiektów odpowiada konstruktor dekoratorów pseudokod może wyglądać następująco:

Komponent * komp1 = new Komponent1();
Komponent * dek1 = new Dekorator1(komp1);
Komponent * dek2 = new Dekorator2(dek1);

Powyższy zapis można skrócić w wyniku czego powstaje następująca instrukcja złożona.

Komponent * dek2 = new Dekorator2(new Dekorator1(new Komponent));

Po udekorowaniu komponentu klient powinien posługiwać się wyłącznie wskaźnikiem ostatnio dostępnego dekoratora, ponieważ udekorowane obiekty są w posiadaniu najbardziej "otaczającego" obiektu. Wykonanie na rzecz ów obiektu żądanie wykonania pewnej operacji:

dek2->wykonaj();

powoduje że obiekt dek2 poza wykonywanymi przez siebie operacjami wywołuje także metodę wykonaj() na rzecz obiektu udekorowanego (dek1). Ten z kolei – ponieważ również jest dekoratorem – wywołuje metodę wykonaj() na rzecz obiektu, który udekorował (komp1). Schemat takiego działania przedstawiony jest na rys. 3

Adamik Łukasz, Politechnika Śląska w Gliwicach (AEiI) - 2010/11