Wzorce czynnościowe
System przed wprowadzeniem zmian:
Wzorzec łańcuch zobowiązań – umożliwia wielu obiektom obsługę żądania, struktura wzorca prezentuję się w taki sposób że obiekty typu Handler są powiązane ze sobą w postaci jednokierunkowej kolejki. Żądanie, które wysyła klient jest przekazywane wzdłuż tego łańcucha, a każdy kolejny obiekt typu Handler może zostać obsłużony przez to konkretne żądanie.
Główną zaletą zastosowanie tego wzorca jest możliwość ograniczenia powiązań pomiędzy klientem, a każdym obiektem typu Handler.
W naszym projekcie obiektami typu Handler są: Nablyszczanie, Woskowanie, Suszenie oraz Mycie. Obiektem, który definiuje interfejs do obsługi żądań jest klasa Operacje. Dzięki temu zastosowaniu nasze operacje nie muszą być kolejno wywoływane przez klienta, tylko są układane w łańcuchu, który jest obsługiwany przez nasz interfejs.
Wzorzec metoda szablonowa – pozwala na przeniesienie części algorytmu z poziomu nadklasy do podklasy. Główną zaletą zastosowania tego rozwiązania jest możliwość pozostawienia szablonów metod nadklasy w taki sposób, że to programista decyduje o ich konkretnych funkcjonalnościach po przez użycie odpowiednich relacji dziedziczenia.
W naszym projekcie klasą abstrakcyjną jest klasa Program, która odpowiada za inicjalizacje kolejnych metod „szablonowych”. Za sterowanie odpowiada bezpośrednio metoda inicjalizacja, która została rozpisana w notatce na diagramie. Metoda ta najpierw sprawdza czterokrotnie poprawność ustawienia samochodu dla lewej i prawej części z przodu samochodu oraz analogicznie dla tylnych elementów. Następnie sprawdzany jest stan zasobu programu myjni, gdzie w przypadku ich braku wysyłany jest odpowiedni komunikat, kolejno następuje kalibracja natrysku oraz rozpoczęcie licznika programu myjni. Jako ostatni wykonuje się właściwy program dopóki czas programu nie minie.
Podsumowując użycie tych dwóch wzorców projektowych można śmiało stwierdzić, że w przypadku kiedy algorytm wykonywania kolejnych metod różni się dla konkretnych obiektach, lepszym rozwiązaniem jest łańcuch zobowiązań. Natomiast w przypadku kiedy algorytm jest taki sam, lepszym rozwiązaniem problemu jest metoda szablonowa.