Pytanie o wzór dekoratora i klasę dekoratorów abstrakcyjnych? [duplikować]

To pytanie ma już tutaj odpowiedź:

Dlaczego potrzebujemy dekoratora we wzorze dekoratora? 4 odpowiedzi

To 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 nazwieBeverageProste rodzaje napojów, takie jakHouseBlend po prostu rozszerzBeverageAby ozdobić napój, abstrakcyjnyCondimentDecorator klasa jest tworzona, która się rozszerzaBeverage i ma wystąpienieBeveragePowiedzmy, ż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?

questionAnswers(9)

yourAnswerToTheQuestion