Pytanie o wzór dekoratora i klasę dekoratorów abstrakcyjnych? [duplikować]
To pytanie ma już tutaj odpowiedź:
Dlaczego potrzebujemy dekoratora we wzorze dekoratora? 4 odpowiedziTo pytanie zostało już zadanetutaj, ale zamiast odpowiadać na konkretne pytanie, zamiast tego podano opisy, w jaki sposób zostały wykonane prace z dekoratorem. Chciałbym go jeszcze raz zapytać, ponieważ odpowiedź nie jest dla mnie natychmiast widoczna po prostu przez przeczytanie, jak działa wzór dekoratora (przeczytałem artykuł wikipedii i sekcję w książce „Wzory głowy pierwszej konstrukcji”).
Zasadniczo chcę wiedzieć, dlaczego musi zostać utworzona abstrakcyjna klasa dekoratorów, która implementuje (lub rozszerza) jakiś interfejs (lub klasę abstrakcyjną). Dlaczego nie wszystkie nowe „klasy dekorowane” same implementują (lub rozszerzają) podstawowy obiekt abstrakcyjny (zamiast rozszerzać klasę abstrakcyjnych dekoratorów)?
Aby uczynić to bardziej konkretnym, posłużę się przykładem z książki wzorów wzorów dotyczących napojów kawowych:
Istnieje abstrakcyjna klasa komponentów o nazwieBeverage
Proste rodzaje napojów, takie jakHouseBlend
po prostu rozszerzBeverage
Aby ozdobić napój, abstrakcyjnyCondimentDecorator
klasa jest tworzona, która się rozszerzaBeverage
i ma wystąpienieBeverage
Powiedzmy, że chcemy dodać przyprawę „mleczną”, klasęMilk
jest tworzony, który się rozszerzaCondimentDecorator
Chciałbym zrozumieć, dlaczego potrzebowaliśmyCondimentDecorator
klasa i dlaczego klasaMilk
nie mógł po prostu przedłużyćBeverage
sama klasa i została przekazana instancjaBeverage
w jego konstruktorze.
Mam nadzieję, że to jasne ...Jeśli nie Chciałbym tylko wiedziećdlaczego niezbędna jest klasa dekoratorów abstrakcyjnych dla tego wzoru? Dzięki.
Edytuj: Próbowałem to zaimplementować, pomijając klasę dekoratorów abstrakcyjnych i towydaje się nadal pracować. Czy ta abstrakcyjna klasa jest obecna we wszystkich opisach tego wzorca tylko dlatego, że zapewnia standardowy interfejs dla wszystkich nowych zdobionych klas?