Prototyp
Intencja
Kopiowanie instancji już istniejących i modyfikowanie ich, zamiast tworzenia całkiem nowych instancji
Stosowalność
Wzorzec Prototyp powinien być używany, gdy:
- system powinien być niezależny od tego, jak jego produkty są tworzone, składane i reprezentowane;
- klasy, których egzemplarze należy tworzyć są specyfikowane w czasie wykonywania programu, np. przez dynamiczne ładowanie
- istnieje potrzeba uniknięcia budowania hierarchii klas fabryk, która jest porównywalna z hierarchią klas produktów
- stan obiektów klasy może przyjmować tylko jedną z kilku różnych wartości; może być wówczas wygodniej zainstalować odpowiednią liczbę prototypów i klonować je niż ręcznie tworzyć egzemplarze klasy za każdym razem z odpowiednim stanem.
Struktura
Uczestnicy
- Prototyp - deklaruje interfejs klonowania się.
- PrototypKonkretny - implementuje operację klonowania się.
- Klient - tworzy nowy obiekt, prosząc prototyp o sklonowanie się.
Współpraca - Klient prosi prototyp o sklonowanie się.
Konsekwencje
Pozwala na dodawanie i usuwanie obiektów w czasie przebiegu programu
Przyspiesza kreowanie dużych obiektów
Implementacja
/*tworzymy kserokopię oryginału na kserokopiarce*/ public class Kartka implements Cloneable { /*metoda kseruj() jest publiczna aby udostępnić metodę protected clone() z klasy Object*/ public Object kseruj(){ try{ return super.clone(); }catch(Exeption e){ System.out.println(?Wystąpił błąd: ?+e.getMessage()); return null; } } } /*użycie metody kseruj()*/ public class Wyklad { public static void main(String[] args){ Kartka oryginal=new Kartka(); Kartka kopia=(Kartka)oryginal.kseruj(); } }