Pyłek (wzorzec projektowy)

Z Wikipedii, wolnej encyklopedii
Skocz do: nawigacji, wyszukiwania

Pyłek (ang. Flyweight) – strukturalny wzorzec projektowy. Jego celem jest zmniejszenie wykorzystania pamięci poprzez efektywną obsługę wielu małych obiektów za pomocą współdzielenia[1]. Należy do grupy wzorców skatalogowanych przez Gang Czterech.

Przykładowe zastosowanie[edytuj | edytuj kod]

Wzorzec Pyłek stosuje się tam, gdzie klasa ma wiele egzemplarzy, a każdy z tych egzemplarzy może być sterowany w ten sam sposób. Przykład zastosowania można znaleźć w aplikacji wspomagającej modelowanie przestrzennego terenu. W takim muszą się znaleźć obiekty reprezentujące drzewa. Nawet jeśli te obiekty będą bardzo proste (np. będą zawierać tylko wysokość i współrzędne położenia drzewa), to przy modelowaniu wielkich kompleksów zieleni, gdzie będzie potrzeba wielu takich obiektów, aplikacja zacznie działać bardzo wolno. Dlatego w tego typu aplikacjach stosuje się wzorzec Pyłek i zamiast tworzyć wiele egzemplarzy drzew, tworzy się jeden obiekt, który przechowuje stany (współrzędne, wysokość) wszystkich drzew w tablicy.

Struktura wzorca[edytuj | edytuj kod]

Istotą wzorca jest podział danych przechowywanych w ciężkim obiekcie na wewnętrzne i zewnętrzne. Do klasy danych wewnętrznych wybierane są te składowe ciężkiej klasy pierwotnej, których wartości często się powtarzają. Pozostałe składowe stanowią dane zewnętrzne. Po ustaleniu podziału zamiast ciężkich obiektów wzorzec wprowadza odpowiadające im obiekty klientów oraz tzw. obiekty pyłków. 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łka poprzez określone metody. Wzorzec zawiera dwóch uczestników - Fabrykę Pyłków 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śli żaden egzemplarz tej klasy jeszcze nie istnieje.

Konsekwencje stosowania[edytuj | edytuj kod]

Korzyści wynikające z zastosowania tego wzorca to:

  • ograniczenie liczby obiektów używanych w trakcie wykonywania programu, a co za tym idzie zaoszczędzenie pamięci aplikacji – tym większe, im więcej obiektów jest współdzielonych
  • składowanie danych stanu współdzielonych obiektów odbywa się w jednej lokalizacji.

Wady wzorca Pyłek to:

  • zmniejszenie wydajności aplikacji[2]
  • utrata przez pojedyncze, logiczne egzemplarze klasy możliwości posiadania zachowań niezależnych od pozostałych egzemplarzy.


Podobne wzorce[edytuj | edytuj kod]

  • Kompozyt jest często używany wraz z Pyłkiem, by zaimplementować współdzielone liście w strukturze drzewa
  • Pyłek objaśnia czy i w jakich warunkach obiekt typu Stan może być współdzielony
  • Podczas gdy Pyłek pokazuje, jak utworzyć mnóstwo małych obiektów, Fasada pokazuje jak utworzyć jeden obiekt reprezentujący cały podsystem.

Przypisy

  1. Opis wzorca na stronie SourceMaking.com.
  2. Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides: Inżynieria oprogramowania: Wzorce projektowe (Wyd. II). Warszawa: Wydawnictwo Naukowo-Techniczne, 2008, s. 235-248. ISBN 978-83-204-3472-9.

Bibliografia[edytuj | edytuj kod]

  1. Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides: Inżynieria oprogramowania: Wzorce projektowe (Wyd. II). Warszawa: Wydawnictwo Naukowo-Techniczne, 2008, s. 235-248. ISBN 978-83-204-3472-9.
  2. Eric Freeman, Elisabeth Freeman, Kathy Sierra, Bert Bates: Head First. Design patterns. Helion, 2005, s. 636-637. ISBN 83-7631-792-2.

Linki zewnętrzne[edytuj | edytuj kod]