Шаблон оформления декоратора java вопрос переопределения - PullRequest
0 голосов
/ 27 января 2020

Мне нужна помощь в понимании этого примера для декоратора:

    package design.decorator;
public class FillColorDecorator extends ShapeDecorator {
      protected Color color;
      public FillColorDecorator(Shape decoratedShape, Color color) {
            super(decoratedShape);
            this.color = color;
      }
      @Override
      public void draw() {
            decoratedShape.draw();
            System.out.println("Fill Color: " + color);
      }
      // no change in the functionality
      // we can add in the functionality if we like. there is no restriction
      // except we need to maintain the structure of the Shape APIs
      @Override
      public void resize() {
      decoratedShape.resize();
      }
      @Override
      public String description() {
      return decoratedShape.description() + " filled with " + color + " color.";
      }
      // no change in the functionality
      @Override
      public boolean isHide() {
      return decoratedShape.isHide();
      }
}

Этот пример взят с этого сайта: https://dzone.com/articles/decorator-design-pattern-in-java

Я просто не понять, почему они пытаются реализовать методы с неизменным функционалом. Например:

return decoratedShape.isHide();

Зачем это нужно? Мне кажется, что удаление этого и не переопределение неизмененных методов будет хорошо работать.

Спасибо.

1 Ответ

1 голос
/ 27 января 2020

Вы должны реализовать их, потому что в этом случае ShapeDecorator реализует только абстрактный класс Shape: он просто предоставляет единый способ хранения декорированных Shape:

package design.decorator;

public abstract class ShapeDecorator implements Shape {
      protected Shape decoratedShape;
      public ShapeDecorator(Shape decoratedShape) {
            super();
            this.decoratedShape = decoratedShape;
      }
}

. не нужно, если в классе ShapeDecorator вы уже это делаете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...