Pyłek to strukturalny wzorzec projektowy umożliwiający obsługę wielkich ilości obiektów przy jednoczesnej oszczędności pamięci.
Wzorzec Pyłek umożliwia zmniejszenie wymogów w zakresie pamięci RAM poprzez współdzielenie części opisu stanu przez wiele obiektów. Innymi słowy Pyłek przechowuje w pamięci podręcznej te dane, które są wspólne dla wielu różnych obiektów.
Przykłady użycia: Pyłek jest rzadko używany w aplikacjach PHP z racji samej natury tego języka. Skrypt PHP na ogół pracuje na pewnej części danych aplikacji i nigdy nie wczytuje wszystkich danych do pamięci naraz.
Identyfikacja: Pyłek można poznać po obecności metody kreacyjnej zwracającej obiekty z pamięci podręcznej zamiast nowo utworzonych.
Przykład koncepcyjny
Poniższy przykład ilustruje strukturę wzorca Pyłek ze szczególnym naciskiem na następujące kwestie:
Z jakich składa się klas?
Jakie role pełnią te klasy?
W jaki sposób elementy wzorca są ze sobą powiązane?
Poznawszy strukturę wzorca będzie ci łatwiej zrozumieć następujący przykład, oparty na prawdziwym przypadku użycia PHP.
index.php: Przykład koncepcyjny
Output.txt: Wynik działania
Przykład z prawdziwego życia
Zanim zaczniemy, zauważ, że prawdziwych zastosowań wzorca Pyłek w PHP jest niewiele. Wynika to z jednowątkowej natury PHP oraz faktu, że nie przechowuje się w pamięci WSZYSTKICH obiektów aplikacji jednocześnie i w obrębie jednego wątku. Sama idea tego przykładu jest nieco żartobliwa, a problem pamięci można rozwiązać zmieniając strukturę aplikacji, ale niemniej jednak mamy tu okazję zobaczyć jak wzorzec Pyłek może być użyty w prawdziwym życiu. Tyle, jeśli chodzi o rację bytu tego przykładu. Zaczynamy.
W tym przykładzie wzorzec Pyłek zastosowano w celu zminimalizowania zużycia pamięci RAM przez obiekty bazy danych kliniki weterynaryjnej dla kotów. Każdy wpis w bazie danych jest reprezentowany przez obiekt Cat. Jego dane składają się z dwóch części:
Unikalne (zewnętrzne) dane, jak imię, wiek i informacje o właścicielu.
Współdzielone (wewnętrzne) dane, jak rasa, barwa, umaszczenie, itp.
Pierwsza część jest przechowywana bezpośrednio w obrębie klasy Cat, pełniącej rolę kontekstu. Druga część danych znajduje się w osobnym miejscu i może odnosić się do wielu kotów. Dane współdzielone umieszczono w klasie CatVariation. Wszystkie koty mające podobne cechy są powiązane z tą samą klasą CatVariation, a powtarzające się dane nie są powielane w każdym obiekcie.