Grupa MagazynyInternetowe
Online: 889
Wzorzec ten należy do wzorców czynnościowych, czyli opisujących sposób przepływu danych w złożonych aplikacjach.
Marcin Staniszczak
Nadeszła pora, aby zapoznać się z kolejnym wzorcem projektowym. Tym razem będzie nim Polecenie (ang. Command). Wzorzec ten należy do wzorców czynnościowych (dla przypomnienia, wzorce czynnościowe opisują sposób przepływu danych w złożonych aplikacjach). Tak jak to było w przypadku wszystkich poznanych do tej pory wzorców, tak i w tym wypadku nazwa Polecenie doskonale oddaje ideę jego działania (co zapewne sam stwierdzisz po przeczytaniu niniejszego artykułu).
Program komputerowy jest zbiorem instrukcji sterowanych przez użytkowników bądź przez pewne zdarzenia. Niestety najczęściej instrukcje te są obiektami posiadającymi zupełnie odmienne interfejsy, w związku z czym w niektórych przypadkach zarządzanie nimi staje się problematyczne.
Przeanalizujmy przykład występujący często w aplikacjach internetowych – cykliczne wykonywanie pewnych zadań. Problem ten rozwiązuje się, podpinając program (skrypt) pod uniksowego Crona, zaś w przypadku webowych aplikacji napisanych w Javie, posłużyć się można Quartzem (http://www.opensymphony.com/qu...). Jak jednak rozwiązać sam problem dodawania zadań wykonywanych cyklicznie?
Załóżmy, że w pewnych odcinkach czasu mamy jednocześnie dokonać wygenerowania plików XML dla RSS-a i Atoma, wysłać e-maile z informacjami o nowościach do osób, które zapisały się na news-letter oraz pobrać aktualne kursy walut z serwisu NBP (np. na potrzeby przeliczenia cen towarów w sklepie internetowym). Dla ułatwienia wszystkie te operacje wykonywane są w tym samym czasie, np. raz na dzień. A oto interfejsy klas wykonujących odpowiednie zadania:
Interfejs wspólny dla klas generujących kanały RSS oraz Atom:
PHP:1. interface Kanaly { 2. public function generujPlikXML(); 3. }Java:
1. public interface Kanaly { 2. public void generujPlikXML(); 3. }
Interfejs klasy wysyłającej e-maile z newsletterem prezentuje się następująco:
PHP:1. interface Newsletter { 2. public function zapisz($objUzytkownik); 3. public function wypisz($objUzytkownik); 4. public function pobierzOsobyZapisane(); 5. public function wyslijNewsletter($arrAdresyEMail); 6. }Java:
1. public interface Newsletter { 2. public void zapisz(Uzytkownik u); 3. public void wypisz(Uzytkownik u); 4. public List<Uzytkownik> pobierzOsobyZapisane(); 5. public void wyslijNewsletter(List<Uzytkownik>adresyEMail); 6. }
I na koniec interfejs klasy pobierającej aktualne kursy walut z serwisu NBP:
PHP:1. interface KursyWalut { 2. public function aktualizuj(); 3. public function pobierzKurs($strWaluta); 4. }Java:
1. public interface KursyWalut { 2. public void aktualizuj(); 3. public double pobierzKurs(String waluta); 4. }
Same implementacje klas wykonujących odpowiednie zadania pozostawimy puste. Zadbamy jedynie o wyświetlanie odpowiednich informacji, tak abyś mógł łatwo prześledzić proces wykonywania programu:
PHP:Listing zwinięty - 37 liniiJava:
Listing zwinięty - 42 linii
Powiązane publikacje
Brak komentarzy
Artykuły tego autora:
Fasada jest wzorcem zaliczającym się do wzorców strukturalnych. Jest to jeden z popularniejszych, a jednocześnie najprostszych wzorców projektowych.
Polecamy:
Na skróty:
Magazyny Internetowe| Co za ile| Programy| Praca| Magazyn Internet| Internet Maker| Web Toster| ForumNasze serwisy: