Zpo-11-wyk-Slajd9: Różnice pomiędzy wersjami

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Bwalter (dyskusja | edycje)
Nie podano opisu zmian
 
Bwalter (dyskusja | edycje)
Nie podano opisu zmian
 
Linia 1: Linia 1:
==Flyweight: konsekwencje==
==Replace Type Code with Subclasses==


[[Image:zpo-11-wyk-Slajd9.PNG|Flyweight: konsekwencje]]
[[Image:zpo-11-wyk-Slajd9.PNG|Replace Type Code with Subclasses]]




Zastosowanie tego wzorca pozwala na znaczne oszczędności pamięci, szczególnie w aplikacjach korzystających z dużej liczby instancji tego samego typu. Z jednej strony ulega zmniejszeniu ogólna liczba utworzonych obiektów, a z drugiej – rozmiar ich stanów wewnętrznych. Oczywiście, konieczne jest także przechowywanie stanu zewnętrznego, jednak w pewnych sytuacjach może on być obliczony, a nie przechowywany, a ponadto nie wymaga on tworzenia i usuwania obiektów, co jest głównym problemem w tego typu aplikacjach.
Drugie przekształcenie związane z polem reprezentującym stan obiektu dotyczy sytuacji, w którym zmiana stanu oznacza zmianę zachowania niektórych metod obiektu. W tym wypadku użycie pojedynczej klasy jest niewystarczające: konieczne jest pokrycie metod, tak aby ich zachowanie odpowiadało stanowi, w jakim znajduje się obiekt.


Przykładem zastosowania tego wzorca jest mechanizm zarządzania komponentami EJB w kontenerach. Gdy klient zażąda stworzenia instancji komponentu, kontener pobiera "pustą" instancję z puli i aktywuje ją poprzez wprowadzenie do niej danych, które wynikają z żądania klienta. Po zakończeniu korzystania z instancji przez klienta lub gdy jest ona przez dłuższy czas niewykorzystywana, następuje jej pasywacja, tzn. jej stan zewnętrzny jest z niej usuwany i zapisywany poza nią, a ona sama wraca do puli gotowych obiektów. Ten mechanizm pozwala na znaczną poprawę efektywności kontenera EJB.
Przekształcenie polega na wydzieleniu każdej wartości pola reprezentującego stan obiektu do oddzielnej podklasy. W ten sposób powstaje możliwość pokrywania metod wymagających zmiany zachowania, a jednocześnie wykorzystane jest dziedziczenie jako mechanizm powtórnego użycia kodu.
 
Pierwszym krokiem przekształcenia jest hermetyzacja pola stanu, tak aby było dostępne we własnej klasie i jej podklasach. Następnie dla każdej dopuszczalnej wartości tego pola należy utworzyć nową podklasę, pokrywając w niej metodę zwracającą wartość pola stanu w nadklasie na reprezentowany przez tę podklasę stan. Po przeniesieniu wszystkich wartości pola ono samo może zostać usunięte z nadklasy, a metody dostępowe do niego (''set'' i ''get'' ) – zadeklarowane jako abstrakcyjne.




[[zpo-11-wyk-Slajd8 | << Poprzedni slajd]] | [[zpo-11-wyk-toc|Spis treści ]] | [[zpo-11-wyk-Slajd10 | Następny slajd >>]]
[[zpo-11-wyk-Slajd8 | << Poprzedni slajd]] | [[zpo-11-wyk-toc|Spis treści ]] | [[zpo-11-wyk-Slajd10 | Następny slajd >>]]

Aktualna wersja na dzień 17:38, 4 lis 2006

Replace Type Code with Subclasses

Replace Type Code with Subclasses


Drugie przekształcenie związane z polem reprezentującym stan obiektu dotyczy sytuacji, w którym zmiana stanu oznacza zmianę zachowania niektórych metod obiektu. W tym wypadku użycie pojedynczej klasy jest niewystarczające: konieczne jest pokrycie metod, tak aby ich zachowanie odpowiadało stanowi, w jakim znajduje się obiekt.

Przekształcenie polega na wydzieleniu każdej wartości pola reprezentującego stan obiektu do oddzielnej podklasy. W ten sposób powstaje możliwość pokrywania metod wymagających zmiany zachowania, a jednocześnie wykorzystane jest dziedziczenie jako mechanizm powtórnego użycia kodu.

Pierwszym krokiem przekształcenia jest hermetyzacja pola stanu, tak aby było dostępne we własnej klasie i jej podklasach. Następnie dla każdej dopuszczalnej wartości tego pola należy utworzyć nową podklasę, pokrywając w niej metodę zwracającą wartość pola stanu w nadklasie na reprezentowany przez tę podklasę stan. Po przeniesieniu wszystkich wartości pola ono samo może zostać usunięte z nadklasy, a metody dostępowe do niego (set i get ) – zadeklarowane jako abstrakcyjne.


<< Poprzedni slajd | Spis treści | Następny slajd >>