Wzorzec fasady (lub wzorzec elewacji) jest wzorcem projektowym oprogramowania powszechnie używanym w programowaniu zorientowanym obiektowo. Nazwa jest przez analogię do fasady architektonicznej.

Fasada jest obiektem, który zapewnia uproszczony interfejs do większego ciała kodu, takiego jak biblioteka klas. Fasada może:

  • uczynić bibliotekę oprogramowania łatwiejszą w użyciu, zrozumieniu i testowaniu, ponieważ fasada posiada wygodne metody dla typowych zadań;
  • uczynić bibliotekę bardziej czytelną, z tego samego powodu;
  • zmniejszyć zależności kodu zewnętrznego od wewnętrznego działania biblioteki, ponieważ większość kodu korzysta z fasady, co pozwala na większą elastyczność w rozwijaniu systemu;
  • opasać źle zaprojektowaną kolekcję API jednym dobrze zaprojektowanym API.

Wzorzec projektowy Fasada jest często używany, gdy system jest bardzo złożony lub trudny do zrozumienia, ponieważ system ma dużą liczbę współzależnych klas lub jego kod źródłowy jest niedostępny. Ten wzorzec ukrywa złożoność większego systemu i zapewnia prostszy interfejs dla klienta. Zazwyczaj obejmuje on pojedynczą klasę opakowującą, która zawiera zestaw członków wymaganych przez klienta. Członkowie ci uzyskują dostęp do systemu w imieniu klienta fasady i ukrywają szczegóły implementacji.

Usage

Fasada jest używana, gdy pożądany jest łatwiejszy lub prostszy interfejs do obiektu bazowego. Alternatywnie, adapter może być użyty, gdy wrapper musi przestrzegać określonego interfejsu i musi wspierać polimorficzne zachowanie. Dekorator umożliwia dodanie lub zmianę zachowania interfejsu w czasie wykonywania.

.

Pattern Intentent
Adapter Konwertuje jeden interfejs na inny tak, aby pasował do tego, czego oczekuje klient
Dekorator Dynamicznie dodaje odpowiedzialność do interfejsu przez zawijanie oryginalnego kodu
Facade Dostarcza uproszczony interfejs

Wzorzec fasady jest zwykle używany, gdy:

  • prosty interfejs jest wymagany do uzyskania dostępu do złożonego systemu;
  • abstrakcje i implementacje podsystemu są ściśle sprzężone;
  • potrzeba punktu wejścia do każdego poziomu warstwowego oprogramowania; lub
  • system jest bardzo złożony lub trudny do zrozumienia.

Struktura

Facade: Klasa Fasada abstrahuje Pakiety 1, 2, i 3 od reszty aplikacji.Klienci: Obiekty używają wzorca Fasady, aby uzyskać dostęp do zasobów z Pakietów.

Przykład

Jest to abstrakcyjny przykład tego, jak klient („ty”) wchodzi w interakcję z fasadą („komputer”) do złożonego systemu (wewnętrzne części komputera, takie jak procesor i dysk twardy).

/* Complex parts */class CPU { freeze() { /* code here */ } jump(position) { /* code here */ } execute() { /* code here */ }}class Memory { load(position, data) { /* code here */ }}class HardDrive { read(lba, size) { /* code here */ }}/* Facade */class ComputerFacade { constructor() { this.processor = new CPU(); this.ram = new Memory(); this.hd = new HardDrive(); } start() { this.processor.freeze(); this.ram.load(this.BOOT_ADDRESS, this.hd.read(this.BOOT_SECTOR, this.SECTOR_SIZE)); this.processor.jump(this.BOOT_ADDRESS); this.processor.execute(); }}/* Client */let computer = new ComputerFacade();computer.start();

.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.