Zielony Smok - logo witryny

Template = szablon.

Zadanie programistyczne

Przygotować klasy opisujące serwowanie gorących napojów.

Rozwiązanie

Ponieważ procesy są bardzo podobne można użyć wzorca Template (szablon)

1. Tworzymy klasę GoracyNapoj.

2. Metody wsyp(), dodajDodatki() są metodami szablonowymi.

Opisują schemat czynności, ale są bardzo ogólne i wymagają uszczegółowienia,
(nadpisania) w klasach pochodnych. Metoda przygotuj() tez jest szablonowa, ale
nie jest nadpisywana, gdyż schemat przygotowywania kawy i herbaty jest
taki sam. Gdyby przygotowywanie kawy i herbaty różniło się albo utworzono by
inny napój, który ma inny schemat przygotowywania trzeba by
metodę przygotuj() też nadpisać.

Klasy

Klasa GoracyNapoj
package template;
class GoracyNapoj {
    public void przygotuj() {
        zagotujWode();
        wsyp();
        dodajCukier();
        dodajDodatki();
        nalejWody();
        zamieszaj();
    }
    private void zagotujWode() {
        System.out.println("Gotowanie wody");
    }
    void wsyp() {
        System.out.println("Wsypywanie składnika");
    }
    private void dodajCukier() {
        System.out.println("Dodawanie cukru");
    }
    void dodajDodatki() {
        System.out.println("Dodawanie dodatków");
    }
    private void nalejWody() {
        System.out.println("Nalewanie wody");
    }
    private void zamieszaj() {
        System.out.println("Mieszanie");
    }
}
Klasa Herbata
package template;
class Herbata extends GoracyNapoj {
    @Override
    public void wsyp() {
        System.out.println("Dodawanie herbaty");
    }
    @Override
    public void dodajDodatki() {
        System.out.println("Dodawanie dodatkow: Cytryna, Miód");
    }
}
Klasa Kawa
package template;
class Kawa extends GoracyNapoj {
    @Override
    public void wsyp() {
        System.out.println("Wsypywanie kawy");
    }
    @Override
    public void dodajDodatki() {
        System.out.println("Dodawanie dodatków: Śmietanka, Czekolada");
    }
}
Klasa Barman
package template;
class Barman {
    public static void main(String[] args) {
        Herbata tea = new Herbata();
        Kawa coffee = new Kawa();
        System.out.println("Przygotowywanie herbaty ...");
        tea.przygotuj();
        System.out.println("Przygotowywanie kawy ...");
        coffee.przygotuj();
    }
}

Wynik

Klasa Barman jest klasa uruchamiająca. Po uruchomieniu zobaczymy:

Przygotowywanie herbaty ...
Gotowanie wody
Dodawanie herbaty
Dodawanie cukru
Dodawanie dodatkow: Cytryna, Miód
Nalewanie wody
Mieszanie
Przygotowywanie kawy ...
Gotowanie wody
Wsypywanie kawy
Dodawanie cukru
Dodawanie dodatków: Śmietanka, Czekolada
Nalewanie wody
Mieszanie