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();
	}
}