Dekorator to wzorzec strukturalny pozwalający dynamicznie rozszerzać możliwości obiektu bez zmieniania jego klasy ani tworzenia podklas. Obiekt jest opakowywany w „dekorator” o tym samym interfejsie, który przekazuje wywołania dalej i dodaje własne działania przed lub po nich.
Jak działa dekorator?
Dekoratory można zagnieżdżać, np. obiekt zapisujący dane do pliku opakowuje się w dekorator kompresji, a ten w dekorator szyfrowania. Każdy robi jedną rzecz, a kolejność składania decyduje o wyniku. Działa to jak nakładanie warstw ubrań.
Zastosowania
Dodawanie logowania, pamięci podręcznej, kontroli uprawnień lub pomiaru czasu do istniejących usług bez zmiany ich kodu. W wielu językach funkcjonują też dekoratory na poziomie składni, np. w Pythonie i TypeScript, oraz middleware w aplikacjach webowych, który działa na podobnej zasadzie.
Dekorator a dziedziczenie
Dziedziczenie wiąże rozszerzenie na stałe z klasą. Dekorator pozwala komponować zachowania w czasie działania programu i unika eksplozji podklas dla każdej kombinacji funkcji. Ceną jest większa liczba małych obiektów.
Ma to bezpośredni związek z praktykami, na których opiera się pisanie czytelnego i zrozumiałego kodu.
Zobacz w praktyce
Clean Code - jak pisać czytelny i zrozumiały kod
Edge SEO – jak wdrożyć zmiany na stronie przez middleware CDN?
Overengineering w stronach internetowych Powiązane pojęcia
Wszystkie hasła z kategorii Programowanie i wzorce projektowe