Kompozyt (Composite)

Słownik kwalifikacji INF.04 - Projektowanie, programowanie i testowanie aplikacji

Kompozyt to strukturalny wzorzec projektowy, którego głównym celem jest umożliwienie traktowania pojedynczych obiektów i grup obiektów w taki sam sposób.

Wzorzec ten sprawdza się szczególnie wtedy, gdy dane mają strukturę drzewa, np. foldery i pliki, elementy interfejsu użytkownika, kategorie produktów albo struktura organizacyjna firmy.

Główny zamysł

Klient nie musi wiedzieć, czy pracuje z pojedynczym elementem, czy z całym zbiorem elementów. Wywołuje tę samą metodę, a obiekt sam decyduje, jak ją obsłużyć.

Przykład:
- plik jest pojedynczym elementem,
- folder może zawierać pliki i inne foldery,
- zarówno plik, jak i folder mogą mieć metodę wyswietl().

Dzięki temu kod klienta może wyglądać jednolicie:

element.wyswietl();

bez sprawdzania, czy element jest plikiem, czy folderem.

Typowe role we wzorcu

  • Component — wspólny interfejs lub klasa abstrakcyjna dla wszystkich elementów.
  • Leaf — pojedynczy obiekt, który nie zawiera innych elementów.
  • Composite — obiekt złożony, który przechowuje inne elementy i deleguje do nich operacje.
  • Client — kod korzystający z obiektów przez wspólny interfejs.

Najważniejsza korzyść

Kompozyt upraszcza kod klienta, ponieważ pozwala obsługiwać pojedyncze obiekty i ich kolekcje w spójny sposób. To właśnie odróżnia go od wzorców, które służą np. do zmiany zachowania obiektu lub komunikacji między obiektami.