Stronę tą wyświetlono już: 3658 razy
Opis wzorca projektowego dekorator
Wzorzec projektowy dekorator należy do wzorców strukturalnych. Wzorzec tego typu umożliwia rozszerzenie funkcjonalności podstawowego obiektu poprzez opakowanie go. Obiekt opakowujący nazywa się dekoratorem i zawiera on wskaźnik do interfejsu głównego obiektu po którym również on dziedziczy.
Przykład diagramu UML wzorca projektowego dekorator
Poniższy przykład diagramu UML umożliwia rozszerzenie działania obiektu podstawowego klasy Tank, która dziedziczy interfejs iTank o nowe elementy takie jak:
- ExternalTank - dodatkowy zbiornik paliwa dla czołgu;
- ExternalMachineGun - montuje karabin maszynowy na czołgu
Powyższe klasy dziedziczą po interfejsie iDecorator, który zawiera wskaźnik na interfejs iTank, po którym równocześnie dziedziczy. Ważną rolę odgrywa tutaj również destruktor wirtualny umożliwiający poprawne zwalnianie pamięci dynamicznie zadeklarowanej.
Przykład implementacji dekoratora w C++
Wynik działania powyższego kodu:
Tank type: M1A1 Abrams ================================== Maximum fuel level: 1900 FuelLevel: 1900 Cannon diameter: 105 Tank type: M1A1 Abrams ================================== Maximum fuel level: 1500 FuelLevel: 1500 Cannon diameter: 105 External fuel tank ================================== Maximum fuel level: 1500 FuelLevel: 1500 Tank type: M1A1 Abrams ================================== Maximum fuel level: 1500 FuelLevel: 1500 Cannon diameter: 105 External machine gun ================================== Diameter: 30 Tank type: M1A1 Abrams ================================== Maximum fuel level: 1500 FuelLevel: 1500 Cannon diameter: 105 External machine gun ================================== Diameter: 30 External fuel tank ================================== Maximum fuel level: 1500 FuelLevel: 1500 Remove tank witk external tank: Delete external fuel tank! Delete external tank! Remove tank witk external machine gun: Delete external machine gun Delete external tank! Remove tank witk external machine gun and external fuel tank: Delete external fuel tank! Delete external tank! Delete external machine gun Delete external tank!