Skip to content

Witaj w Świecie Jutra!

  • Technologie jutra
  • Sprzęt jutra
  • Aplikacje jutra
  • Programowanie
  • Księga Drogi
  • Renowacja
  • Różności
  • Archiwum
  • Autor
  • Home
  • Wszystko
  • Wzorce projektowe – Facade
  • Programowanie
  • Wszystko

Wzorce projektowe – Facade

Jakub Raczkowski 25 stycznia 2024

Nie o takim makro dzisiaj mówimy. Źródło: www.miops.com

Słowo „makro” można rozumieć na kilka sposobów. Ten który nas dzisiaj interesuje oznacza skrypt pozwalający zrobić kilka rzeczy na raz. Odpowiednikiem takiego makra w świecie kodu jest wzorzec Fasada.

Chyba każdy z nas słyszał o makrach w popularnym pakiecie Office. Ich zadaniem jest przyspieszanie pracy – zamiast mozolnie wklepywać te same dane do n-tego dokumentu, wystarczy odpalić raz ustawione makro i cyk – gotowe. Czas na Pasjansa.

Teraz wyobraźcie sobie taką sytuację:

Robicie własną aplikację, która przyjmuje jakieś dane, umożliwia ich modyfikację i zapisuje rezultat do bazy danych. Jest tam przycisk „Zapisz i wyjdź”. Jak ma wyglądać logika tego komponentu? Co on ma tak dokładnie robić?

Cóż, przede wszystkim ma zapisywać dane. Jeśli np. edytujemy kartę pracownika to najpierw zamieniamy obiekt lokalny – w pamięci, a następnie przesyłamy to do bazy danych – jeśli tu wystąpi jakiś błąd to obsługujemy wyjątek. Jeżeli dane są wrażliwe to warto aby zostało to zalogowane do dziennika, a może nawet przyda się powiadomienie na skrzynkę mailową kierownika. Dopiero kiedy to wszystko zostanie załatwione można wywołać System.exit().

Sporo jak na jeden button, co nie?

Jak zaprogramować takie zależności? O ile wszystkie dotyczą jednego obiektu to można po prostu zaimplementować poniższą metodę w jego klasie:

public void saveAndQuit(){
   this.addToTheList();
   try{
   upadeDatabase(list);
   } catch (DatabaseException e){
   log(e);}
   notifyManager(info(this));
}   

Tak to mniej więcej by wyglądało zakładając, że mówimy o obiektach tej samej klasy. Za to kiedy klas jest więcej to pracy przybywa. Fajnie by było gdyby zaimplementować jakiś mechanizm, który robiłby wszystko na raz. Gdyby…

…przysłaniał skomplikowany zestaw interfejsów swoim, prostym.

Czasami wiedzieć mniej oznacza spać spokojniej. Fasada przysłania nam to co w danej chwili nieistotne.

Wzorzec Fasada zapewnia jeden, zunifikowany interfejs dla całego zestawu interfejsów określonego podsystemu. Fasada tworzy nowy interfejs wysokiego poziomu, który powoduje, że korzystanie z całego podsystemu staje się zdecydowanie łatwiejsze.

Rusz głową! Wzorce projektowe

Ale po kolei…

Jak przygotować drużynę do trudnej potyczki?

Wszystko zależy od tego z kim zamierzamy walczyć. Jeśli z wysysającymi poziomy wampirami to bez czaru „Ochrona przed negatywną energią” rzuconego na każdego członka zespołu ani rusz. W przypadku otumaniających umbrowych kolosów zaklęcie zmieniamy na „Chaotyczne rozkazy”, a przy starciu z wrogimi magami „Osłona przed śmiercią”. Walcząc ze smokiem przyda się „Ochrona przed ogniem”, a z nieumarłym Liszem „Zwój ochrony przed magią”, który niweluje działanie jakichkolwiek zaklęć.

Maksymalne przybliżenie. Pojawiają się piksele, ale nie rażą w oczy tak jak można by oczekiwać.
Doświadczona drużyna jest zawsze przygotowana do walki.

Powyższe to oczywiście podstawa, a jest tego znacznie więcej: aby przyśpieszyć postać, dodać jej siły lub zręczności, polepszyć rzuty obronne, ochronić przed obrażeniami fizycznymi, przywołać jakichś pomocników itd. Czasem samo przygotowanie może trwać tyle ile cała potyczka!

Na szczęście w niektórych grach można tworzyć sobie makra. Włączamy nagrywanie i rzucamy standardowe czary ochronne bądź używamy specjalnych umiejętności. Makro zapamiętuje co zostało użyte, przez kogo i na kogo. Za każdym kolejnym razem wystarczy już odpalić owe makro i poczekać chwilę na pełną gotowość bojową.

Możemy sami przygotować takie makro z użyciem wzorca Fasada. Pełny kod tutaj.

Przygotowania przed walką.

Mamy pełną drużynę: wojownik, łotrzyk, łowca, druid, kapłan i mag. Niektórzy mają po jednym skillu, inni po dwóch. Mogłem zrobić więcej, ale umówmy się, że to postacie na niskich poziomach i jeszcze wiele nie potrafią. Mimo to, jak dobrze policzymy, to i tak w konsoli jest ponad 20 linijek wyniku. Odpalanie tego za każdym razem ręcznie byłoby kłopotliwe.

Z pomocą przychodzi klasa Macro, która bierze te wszystkie klasy do swojego konstruktora, a jej jedyna metoda prepareForBattle() wywołuje żądane metody każdej postaci:

public void prepareForBattle(){
            warrior.useSkill();
            rogue.useSkill();
            ranger.useSkill();
            ranger.castSpell(warrior);
            druid.castSpell(null);
            druid.useSkill();
            cleric.castSpell(warrior,rogue,ranger,druid,cleric,wizard);
            wizard.castSpell(warrior,rogue,ranger,druid,cleric,wizard);
        } 

Jak sami widzicie nie jest to nic skomplikowanego, składnia wzorca jest może nawet łatwiejsza niż w Singletonie.

Facade to pojedyncza klasa, która nie potrzebuje niczego dziedziczyć, ani implementować żadnego interfejsu. Musi natomiast przyjmować do konstruktora wszystkie obiekty, których metody ma wywoływać.

ITCandidateEvaluator

Wzorzec jest sprytny, łatwy i przydatny. Lubię takie i jest spora szansa, że znajdzie się dla niego miejsce w moim kolejnym projekcie. Jeśli tylko zauważę, że pojawi się potrzeba „upieczenia nawet nie dwóch, ale kilku pieczeni na jednym ogniu” to z przyjemnością załatwię sprawę dobrze ustawioną fasadą.

Dziękuję za uwagę i zapraszam do następnego gdzie będziemy omawiać wzorzec Metoda Szablonowa (Template Method).

Tags: design patterns programming

Continue Reading

Previous: Wzorce projektowe – Adapter
Next: Wzorce projektowe – Template Method

Related Stories

Mageege Moon104 – test niskoprofilowego mechanika
  • Sprzęt

Mageege Moon104 – test niskoprofilowego mechanika

11 marca 2025
Przebranżowienie cz.4
  • Programowanie

Przebranżowienie cz.4

27 lutego 2025
Smartfon Jutra
  • Sprzęt

Smartfon Jutra

15 lutego 2025

Ze świata

  • Antyweb
  • Kwantowo
  • Dwóch po dwóch
Nowy szef NASA mówi dość! Pora na wojnę z biurokracją
Lubisz Minecrafta? Tej oferty nie można przegapić
To nie mogło się udać. Najgorsze przykłady rebrandingu
Legalna praca zdalna: gdzie szukać ofert i jak nie dać się oszukać?
Masz światłowód Orange? Możesz płacić mniej. Dwa warunki
Disney+ ma kłopoty. Użytkownicy już zauważyli, że coś się zmieniło
3 potężne nowości na Spotify. Będziecie ich używać codziennie
Nvidia świętuje sukces. To już sześć lat rosnącej popularności
Co nowego w Windows w 2026 roku? Jest na co czekać
Spotify chce zmienić jak słuchasz piosenek. Testy już trwają
Apple się przeliczyło i zmienia plany. To dobra wiadomość dla użytkowników
HBO szykuje epickie fantasy. Czy adaptacja kultowej gry komputerowej powtórzy sukces GoT?
Chiny wiedzą, jak uczcić start Igrzysk Olimpijskich. To nagranie robi wrażenie
Nowy sposób na beton. Wykorzystamy bezużyteczny składnik
Ferie z AI i programowaniem. Trwają zapisy na bezpłatne warsztaty!
Roboty oficjalnie trafiają do fabryk. Humanoidy zastępują człowieka
To najciekawsza przeglądarka na smartfony. Teraz jest jeszcze lepsza
Walentynki z Play - uważajcie na tę pułapkę
Ta firma chce być w domu każdego Polaka. Całe wyposażenie od jednego producenta
Apple szykuje bombę! Nowy iPhone jeszcze w tym miesiącu
To by było na tyle, jeśli chodzi o możliwość ugody
Ocalić od zapomnienia
Ostatni kwant
ALH 84001 – meteoryt, o którym mówiono nawet w Białym Domu
HESS zarejestrował kosmiczny elektron o niespotykanej energii [Phys. Rev. Lett.]
Matka ciemnej materii – recenzja biografii “Vera Rubin. Życie”
Satelita, który zerwał się ze smyczy
Wiadomość od Carla Sagana do przyszłych eksploratorów Marsa
Ile najdłużej może trwać zaćmienie Słońca?
Nowa największa liczba pierwsza ma ponad 41 milionów cyfr [GIMPS]
30 lat konsoli PlayStation – Odcinek #130
Omawiamy serię The Walking Dead (gość: Stary Gracz)
Nikt nie potrzebuje cienkich smartfonów – Odcinek #129
To ostatni dzwonek na kolekcjonowanie gier i filmów
Najlepsza relacja z PGA 2025 (Poznań Game Arena)
Bumblebee wśród klawiatur. Marvo Meqa 80W – recenzja
Pierwsze spotkanie z Omoda 7 Super Hybrid
Logitech MX Master 4, Wednesday, 1670 sezon 2 – Odcinek #128
Tani pad, który chciał być jak DualSense. Test Monka Contra GT-96
Secret Service i prasa komputerowa w Polsce – Odcinek #127

To może cię zainteresować:

Mageege Moon104 – test niskoprofilowego mechanika
  • Sprzęt

Mageege Moon104 – test niskoprofilowego mechanika

11 marca 2025
Przebranżowienie cz.4
  • Programowanie

Przebranżowienie cz.4

27 lutego 2025
Smartfon Jutra
  • Sprzęt

Smartfon Jutra

15 lutego 2025
Czym jest Swagger?
  • Programowanie

Czym jest Swagger?

22 lipca 2024
  • Technologie jutra
  • Sprzęt jutra
  • Aplikacje jutra
  • Programowanie
  • Księga Drogi
  • Renowacja
  • Różności
  • Archiwum
  • Autor
Copyright © All rights reserved. | DarkNews by AF themes.