装饰器模式,装饰包含不同方法的子类

时间:2014-11-02 08:17:28

标签: java inheritance design-patterns decorator

假设我有一个Animal抽象类和三个扩展Dog类的CatBearAnimal类。 Animal类有抽象方法getDescriptionDog类有一个方法getNumberOfHomeworksEaten,但CatBear没有。假设我有一个装饰器YellowStripesBlueStripesGreenStripes,它们都扩展Animal类并装饰getDescription方法。如果我用装饰器装饰DogCatBear

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的{​​{1}}方法?由于doggetNumberOfHomeworksEaten没有该方法,因此在每个装饰器中设置Cat是没有意义的。

1 个答案:

答案 0 :(得分:1)

如果您将dog投射到Dog,您就可以使用此方法。

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

Dog dog = (Dog) animal;
dog.getNumberOfHomeworksEaten();