Wzorzec projektowy kompozyt - composite
Stronę tą wyświetlono już: 5091 razy
Opis wzorca projektowego kompozyt
Wzorzec projektowy kompozyt należy do wzorców strukturalnych. Umożliwia on tworzenie struktur drzewiastych, gdzie podstawową jednostką jest liść ang. Leaf a rozszerzoną kompozyt ang. Composite, przy czym kompozyt można opisać jako swego rodzaju gałąź struktury. Oba te elementy (liść i kompozyt) dziedziczą po wspólnym interfejsie. Sam kompozyt zawiera kontener, który może przechowywać interfejsy, za którymi mogą stać jednostki podstawowe (liście) lub kolejne gałęzie (kompozyty).
Ten wzorzec jest wręcz stworzony do tworzenia np. drzewa dokumentu XML, implementacji algorytmu ONP, tworzenia struktury menu itd. itp. Innymi słowy można go stosować tam, gdzie ma się do czynienia z strukturami drzewiastymi.
Przykładowy diagram UML wzorca projektowego kompozyt
Jak widać na poniższym diagramie UML użytkownik używa interfejsu iComponent, który został otrzymany z utworzenia instancji obiektów klas Leaf i Composite. Co ważne klasa Composite agreguje interfejsy iComponent w polu components umożliwiając tym samym dodawanie nowych gałęzi (Composite) i liści (Leaf) do obiektu tej klasy.
Bardzo ważnym elementem jest tutaj również destruktor wirtualny, który niszczy wszystkie elementy utworzonej struktury programu.
Przykładowa implementacja wzorca projektowego kompozyt w C++
Przykład pokazujący jak można stworzyć drzewo menu programu za pomocą tego wzorca.
Wynik działania powyższego programu:
=============================== Menu =============================== =============================== File =============================== Open Save =============================== Edit =============================== Copy Paste Duplicate =============================== Delete Menu =============================== =============================== Delete Edit =============================== Delete leaf: Duplicate Delete leaf: Paste Delete leaf: Copy =============================== End of delete Edit =============================== =============================== Delete File =============================== Delete leaf: Save Delete leaf: Open =============================== End of delete File =============================== =============================== End of delete Menu ===============================
Tytuł:
C++. Projektowanie oprogramowania. Zasady i wzorce projektowe
Autor:
Klaus Iglberger
Tytuł:
Wzorce projektowe. Rusz głową! Tworzenie rozszerzalnego i łatwego w utrzymaniu oprogramowania obiektowego. Wydanie II
Autor:
Eric Freeman, Elisabeth Robson
Tytuł:
React 17. Wzorce projektowe i najlepsze praktyki. Projektowanie i rozwijanie nowoczesnych aplikacji internetowych. Wydanie III
Autor:
Carlos Santana Roldán
Tytuł:
Wzorce projektowe. Rusz głową! Tworzenie rozszerzalnego i łatwego w utrzymaniu oprogramowania obiektowego. Wydanie II
Autor:
Eric Freeman, Elisabeth Robson
Tytuł:
Wzorce projektowe w .NET Core 3. Projektowanie zorientowane obiektowo z wykorzystaniem C# i F#
Autor:
Dmitri Nesteruk
Tytuł:
Wzorce projektowe. Elementy oprogramowania obiektowego wielokrotnego użytku
Autor:
Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides
Tytuł:
Projektowanie interfejsów., Sprawdzone wzorce projektowe. Wydanie III
Autor:
Jenifer Tidwell, Charles Brewer, Aynne Valencia-Brooks
Tytuł:
Kubernetes. Wzorce projektowe. Komponenty wielokrotnego użycia do projektowania natywnych aplikacji chmurowych
Autor:
Bilgin Ibryam, Roland Huß
Tytuł:
Wzorce projektowe w .NET. Projektowanie zorientowane obiektowo z wykorzystaniem C# i F#
Autor:
Dmitri Nesteruk
Tytuł:
Programowanie zorientowane obiektowo. Wzorce projektowe. Wydanie II
Autor:
Alan Shalloway, James R. Trott