Fasada (wzorzec projektowy): Różnice pomiędzy wersjami
[wersja przejrzana] | [wersja przejrzana] |
Usunięta treść Dodana treść
m drobne redakcyjne |
dostosowanie do zaleceń edycyjnych, dodanie diagramu |
||
Linia 1:
'''
▲'''Wzorzec fasady''' to w [[inżynieria oprogramowania|inżynierii oprogramowania]] jeden z [[Wzorzec projektowy (informatyka)|wzorców projektowych]] należący do grupy ''wzorców strukturalnych''. Jest on pomyślany jako środek dostępu do złożonego systemu prezentujący na zewnątrz uproszczony lub uporządkowany [[API (informatyka)|interfejs programistyczny]].
== Problem ==
Rozważmy kompilator napisany z wykorzystaniem reguł [[Programowanie obiektowe|programowania obiektowego]]. Znajdziemy w nim klasy i obiekty reprezentujące [[parser]], [[lekser]], bufory na kod wynikowy i wiele innych elementów. Interfejs całego systemu posiada duże możliwości, lecz jest skomplikowany, tymczasem większość jego użytkowników będzie zainteresowana po prostu uruchomieniem [[Kompilacja (informatyka)|kompilacji]] określonego pliku i pobrania wyniku. Rozwiązaniem jest zastosowanie wzorca ''Fasada'' do stworzenia dodatkowego [[Obiekt (programowanie obiektowe)|obiektu]], który pozwala szybko uruchomić najbardziej typowe zadania, jednocześnie nie ukrywając złożoności systemu przed tymi, którzy jej faktycznie potrzebują.
== Budowa ==
[[Plik:
We wzorcu wyróżniamy następujące elementy:
* '''złożony system''' — reprezentowany na diagramie przez [[Klasa (programowanie obiektowe)|klasy]] <code>Element1</code> do <code>Element5</code>. Chcemy uprościć dostęp do niego,
* '''fasada''' — klasa posiadająca referencje do elementów systemu z [[Metoda (programowanie obiektowe)|metodami]] do wykonywania najczęściej potrzebnych zadań,
* '''klient''' — dowolny kod zainteresowany wykorzystaniem złożonego systemu.
Klient komunikuje się z systemem poprzez fasadę, która w jego imieniu wykonuje niezbędne operacje na złożonym systemie. To, czy klient posiada także bezpośredni dostęp do systemu, leży w gestii programisty implementującego wzorzec, ponieważ możliwe jest wykorzystanie go do podziału systemu na warstwy, gdzie fasady służą do uproszczenia i ujednolicenia komunikacji.
== Konsekwencje ==
* duże zmniejszenie liczby zależności między klientem, a złożonym systemem — jeśli klient nie korzysta bezpośrednio z żadnych elementów ukrytego za fasadą systemu, całość jest łatwiejsza w konserwacji i utrzymaniu,
* wprowadzenie podziału aplikacji na warstwy, który ułatwia niezależny rozwój klienta i złożonego systemu,
* możliwość zablokowania klientowi drogi do bezpośredniego korzystania ze złożonego systemu, jeśli jest to konieczne,
* kod klienta wykorzystującego fasadę jest czytelniejszy i łatwiejszy w zrozumieniu<ref>{{cytuj stronę | url = http://wiki.asp.net/page.aspx/311/facade/ | tytuł = Facade | opublikowany = [http://wiki.asp.net/ ASP.NET Wiki] | data dostępu = 2011-09-16 | język = en}}</ref>,
== Przykład ==
▲[[Plik:Fasada.svg|thumb|right|500px|Przykład użycia wzorca fasady]]
Przykładem użycia wzorca fasady może być [[aplikacja (informatyka)|aplikacja]] [[bankomat]]owa, która musi wchodzić w interakcję z systemem bankowym. Skoro aplikacja bankomatowa wykorzystuje tylko niewielką część możliwości systemu bankowego ([[autoryzacja]] [[karta płatnicza|karty]], sprawdzenie stanu [[Rachunek bankowy|konta]], wypłata i ew. wpłata), to można zastosować obiekt fasady, który zasłoni przed zewnętrznymi aplikacjami skomplikowaną strukturę wewnętrzną systemu bankowego. Upraszcza to pisanie aplikacji na bankomaty, a jednocześnie zapewnia lepsze bezpieczeństwo systemu bankowego.
{{Przypisy}}
== Bibliografia ==
{{Bibliografia start}}
# {{cytuj książkę | imię = Erich | nazwisko = Gamma | autor link = Erich Gamma | imię2 = Richard | nazwisko2 = Helm | autor link2 = Richard Helm | imię3 = Ralph | nazwisko3 = Johnson | autor link3 = Ralph Johnson | imię4 = John | nazwisko4 = Vlissides | autor link4 = John Vlissides | tytuł = Wzorce projektowe. Elementy oprogramowania obiektowego wielokrotnego użytku | wydawca = [http://www.helion.pl Helion] | rok = 2010 | strony = 161-169 |isbn = 978-83-246-2662-5}}
{{Bibliografia stop}}
{{Wzorce projektowe}}
|