Декоратор Pattern, украшающий подклассы, которые содержат различные методы

Предположим, у меня есть Animal абстрактный класс и три класса Dog,Cat, а также Bear которые расширяют Animal учебный класс. Animal класс имеет абстрактный метод getDescription, Dog у класса есть метод getNumberOfHomeworksEaten, но Cat а также Bear не делайте. Предположим, у меня есть декораторы YellowStripes, BlueStripes, GreenStripes что все расширяют Animal класс и украшает getDescription метод. Если я украшаю Dog, Cat, а также Bear с декораторами:

Animal dog = new Dog();
dog = YellowStripes(dog);
dog = BlueStripes(dog);
dog = GreenStripes(dog);

Cat cat = new Cat();
//decorate cat

Bear bear = new Bear();
//decorate bear

Как я могу получить доступ к getNumberOfHomeworksEaten метод для dog? Не было бы смысла иметь getNumberOfHomeworksEaten в каждом декораторе с Cat а также Bear нет такого метода.

1 ответ

Решение

Если вы бросили dog в Dog Вы сможете использовать этот метод.

Animal animal = new Dog();
animal = YellowStripes(animal);
animal = BlueStripes(animal);
animal = GreenStripes(animal);

Dog dog = (Dog) animal;
dog.getNumberOfHomeworksEaten();
Другие вопросы по тегам