piątek, 15 lutego 2013

Pyłek


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