Prototyp To kreacyjny wzorzec projektowy pozwalający klonować obiekty — również te złożone — bez konieczności sprzęgania z ich klasami.
Wszystkie klasy prototyp powinny mieć wspólny interfejs który pozwoli kopiować ich obiekty nawet gdy nie zna się ich konkretnych klas. Obiekty-prototypy mogą tworzyć kompletne kopie, ponieważ pola prywatne danej klasy są dostępne dla innych obiektów tej samej klasy.
Przykłady użycia: Wzorzec Prototyp jest dostępny w PHP od razu. Za pomocą słowa kluczowego clone można tworzyć dokładne kopie obiektu. Aby wyposażyć klasę w funkcjonalność klonowania trzeba zaimplementować metodę __clone.
Identyfikacja: Prototyp można łatwo poznać dzięki obecności metod clone lub copy, itp.
Przykład koncepcyjny
Poniższy przykład ilustruje strukturę wzorca Prototyp 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
Wzorzec Prototyp pozwala w wygodny sposób powielać istniejące obiekty zamiast próbować je zrekonstruować poprzez bezpośrednie kopiowanie zawartości ich pól. Podejście oparte o bezpośrednie kopiowanie nie tylko prowadzi do sprzęgnięcia z klasami klonowanego obiektu, ale też uniemożliwia skopiowanie zawartości pól prywatnych. Wzorzec Prototyp pozwala na klonowanie w obrębie kontekstu klasy którą chcemy sklonować, a tam nie ma powyższego ograniczenia.
Poniższy przykład pokazuje jak sklonować skomplikowany obiekt Page za pomocą wzorca Prototyp. Klasa Page zawiera mnóstwo prywatnych pól, których wartość będzie można przenieść do obiektu-klonu dzięki wzorcowi Prototyp.