czwartek, 21 lutego 2013

Prototyp


Kolejnym z omawianych wzorców kreacyjnych jest Prototyp (Prototype). Zastosowanie tego wzorca umożliwia tworzenie nowych obiektów na podstawie już istniejących, których nazywamy prototypami. Polega to na kopiowaniu już istniejących instancji i modyfikowanie ich, zamiast tworzenia nowych. Wykorzystywany jest najczęściej, gdy potrzebujemy utworzyć dużą liczbę obiektów tego samego typu lub obiektów o podobnych właściwościach. Dodatkowo, warto zauważyć, że kopiowanie gotowego obiektu jest szybsze niż tworzenie nowego.



Struktura



 

Uczestnicy

  • Prototyp - deklaruje interfejs do klonowania siebie;
  • Konkretny prototyp - klasa, która implementuje metodę klonowania siebie;
  • Klient - wywołuje metodę Prototypu, która klonuje go.

Do implementacji tego wzorca tworzy się klasę abstrakcyjną z metodą służącą do kopiowania instancji. Metoda ta jest implementowana przez klasy dziedziczące, rozszerzając ją o swoje warunki i parametry wymagane do stworzenia zmodyfikowanego klonu.


Konsekwencje

  • Pozwala na dynamiczne dodawanie i usuwanie obiektów (w czasie działania kodu); 
  • przyspiesza powoływanie do życia dużych obiektów; 
  • pracując na kopi obiektu unikamy ryzyka możliwości zmodyfikowania danych pierwotnego obiektu.

Zastosowanie


  • Gdy chcemy tworzyć nowego obiekty na podstawie już istniejących, ewentualnie rozszerzając ich właściwości;
  • gdy chcemy mieć możliwość przywrócenia obiektu do stanu, w którym się pierwotnie znajdował;
  • gdy chcemy uniezależnić system od sposobu w jakim tworzone są w nim produkty;
  • gdy nie chcemy tworzyć w budowanej aplikacji podklas obiektu budującego;
  • gdy stan obiektów klasy może przyjmować tylko jedną z kilku różnych wartości – chcemy mieć możliwość tworzenia wielu podobnych obiektów, które mogą być łatwo modyfikowane. 


Przykład


Przykładem może być projektowanie systemu dla biblioteki, w którym potrzeba jest tworzenia obiektów książek z określonej kategorii książek o podobnych parametrach, różniących się jedynie nieznacznymi szczegółami, np. tytuł, liczba stron.




Brak komentarzy:

Prześlij komentarz