WZORCE #4 – Prototyp

Witam serdecznie wszystkich czytelników…żartuję –  cześć wszystkim !

Zapraszam na kolejny post z serii „Wzorce”. Zaprezentuję wam wzorzec, którego pewnie bardzo często używacie, nawet o tym nie wiedząc, a będzie to Prototyp.

Przeznaczenie:

Celem tego wzorca jest umożliwienie tworzenia obiektów na podstawie innej klasy. Innymi słowy jest to zwyczajne kopiowanie obiektu (plus modyfikacja) zamiast budowania nowy.

Zastosowanie:

Ten wzorzec możemy wykorzystywać w wielu różnych sytuacjach, musimy  tylko skopiować stworzony wcześniej obiekt. Pokażę to na przykładzie przemysłu kolarskiego.
Wyobraźmy sobie, że produkujemy rowery.  Dla uproszczenia założymy, że części w konkretnych modelach różnią się tylko kolorem. Oczywiście, dostajemy bardzo dużo zleceń na produkcję różnych egzemplarzy, które tworzymy poprzez składanie konkretnych części w całość.
Jednak w momencie kiedy dostaniemy zlecenie na zbudowanie modelu o tych samych parametrach co poprzedni, nie musimy tworzyć nowego roweru. Wystarczy, że skopiujemy już istniejący.
Aby ten mechanizm działał potrzebujemy klasy Bike, reprezentującej strukturę roweru oraz, oczywiście, metody clone(), która kopiuje obiekt, na którym funkcja ta została wywołana.

Implementacja:

Główna klasa wraz z metodą clone()

public class Bike implements Cloneable {

    enum Color{
        Red, Green, Blue, Orange
    }

    private Color frame;

    private Color spokes;

    private Color tires;

    private Color handlebar;

    public Object clone() {
        try {
            return (Bike) super.clone();
        } catch (CloneNotSupportedException e) {
            e.printStackTrace();
            return null;
        }
    }
}

Wywołanie programu

Bike bike = new Bike(Bike.Color.Blue, Bike.Color.Red, Bike.Color.Green, Bike.Color.Orange);
System.out.println("Original bike " + bike.toString());

Bike copyBike = (Bike) bike.clone();
System.out.println("Copy bike " + copyBike.toString());

Rezultat

Original bike {frame=Blue, spokes=Red, tires=Green, handlebar=Orange}
Copy bike {frame=Blue, spokes=Red, tires=Green, handlebar=Orange}

 

Diagram klas:

 

Dziękuję za przeczytanie tego dosyć krótkiego artykułu. Zapraszam do czytanie innych postów.
Pozdrawiam.

Link do repozytorium:
GitHub

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *