Pyłek (Flyweight) jest wzorcem strukturalnym,
który rozszerza niejako wzorzec puli obiektów. Pula obiektów przechowuje
nierozróżnialne obiekty gotowe do użycia – niemożliwe jest przechowywanie w
nich informacji specyficznej. Pyłek stosowany jest do tworzenia bardzo dużej
liczby obiektów (niewiele się różniących lub identycznych), którymi można
zarządzać w sposób jednolity. Wzorzec tworzy jedyną instancję danego obiektu,
którą następnie można modyfikować – zmieniać wartości określonych jego
atrybutów (tylko to, co uległo zmianie). W ten sposób klient odczytuje
dokładnie taki obiekt, jakiego oczekuje, nie powodując zwiększenia zużycia
zasobów. Efektem tego jest zmniejszenie zapotrzebowania aplikacji na pamięć.
Istotą tego
wzorca jest podział danych przechowywanych w obiektach na dane wewnętrzne
(współdzielone) i zewnętrzne (unikatowe dla każdego obiektu). Dane wewnętrzne
nie są modyfikowane przy inicjacji obiektu, natomiast dane zewnętrzne są
dostarczane dla każdego obiektu z zewnątrz (np. poprzez odczyt z bazy danych)
przed przekazaniem do klienta.
Inaczej mówiąc, dzięki
współdzieleniu, Pyłek rozwiązuje problem powielania tych samych informacji
przez wiele różnych obiektów. Wspólne informacje przechowuje się w jednym
miejscu, a obiekty posiadają do niej referencję.
Struktura
Uczestnicy
Obiekt (Pyłek):
- podlega współdzieleniu między klientów;
- definiuje interfejs do przyjmowania i odtwarzania stanu zewnętrznego;
- przechowuje stan wewnętrzny;
- jest niezależny od kontekstu (oprócz stanu zewnętrznego).
Fabryka:
- tworzy i przechowuje obiekty.
Wzorzec zawiera
dwóch uczestników – Fabrykę i Pyłek. Klient nie tworzy egzemplarzy typu Pyłek
samodzielnie, a jedynie wysyła do Fabryki żądanie ich udostępnienia. Fabryka
zwraca Klientowi istniejący Pyłek lub tworzy nowy, jeżeli żaden egzemplarz tej
klasy jeszcze nie istnieje. Obiekty pyłków są tworzone z wybranych wcześniej
danych wewnętrznych. Każdy z nich jest współdzielony przez wielu klientów i nie
można go modyfikować. Dane zewnętrzne, unikatowe dla każdego obiektu klienta są
dostarczane obiektowi pyłku poprzez określone metody.
Konsekwencje
Zalety:
- zmniejszenie ogólnej liczby obiektów - oszczędność pamięci;
- zmniejszenie rozmiaru stanu obiektów - składowanie danych współdzielonych obiektów odbywa się w jednej lokalizacji;
- stan zewnętrzny może być przechowywany lub wyliczany.
Wady:
- spadek wydajności obliczeniowej - dodatkowy nakład na zarządzanie stanem zewnętrznym;
- utrata poprzez pojedyncze, logiczne egzemplarze klasy możliwości posiadania zachowań niezależnych od pozostałych egzemplarzy.
Zastosowanie
Wzorzec stosuje
się tam, gdzie klasa ma wiele egzemplarzy, a każdy z nich może być wykorzystywany
w ten sam sposób. Dzięki temu znacznie oszczędza się pamięć. Z jednej strony
zmniejszeniu ulega ogólna liczba utworzonych obiektów, a z drugiej rozmiar ich
stanów wewnętrznych (pomijany jest tutaj koszt związany z przechowywaniem stanu
zewnętrznego). Ponadto, nie jest wymagane stałe tworzenie i usuwanie obiektów.
Przykład
Przykładem zastosowania tego wzorca może być aplikacja graficzna generująca obraz złozony z dużej liczby obiektów graficznych. Zamiast wielu egzemplarzy obiektu tego samego typu, tworzony jest jeden obiekt, który przechowuje określone dane (np. kolor, współrzędne, rozmiar) wszystkich obiektów w zbiorze.
Źródła
Brak komentarzy:
Prześlij komentarz