【问题标题】:Decorator design pattern java overriding methods question装饰器设计模式java覆盖方法问题
【发布时间】:2020-05-13 06:13:57
【问题描述】:

我需要帮助理解这个装饰器示例:

    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();

为什么这是必要的? 在我看来,删除它而不覆盖未更改的方法就可以了。

谢谢。

【问题讨论】:

    标签: java oop decorator


    【解决方案1】:

    您必须实现它们,因为在这种情况下ShapeDecorator 只是一个抽象类实现Shape:它只是提供了一种统一的方式来存储装饰的Shape

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

    如果您在 ShapeDecorator 课程中已经这样做了,则不需要它。

    【讨论】:

    • 你打败了我。我想补充一点,要求 OP 询问的方法是一种非常糟糕的编程实践。当您创建一个计划让其他人扩展的类(即他们的 ShapeDecorator 类)时,您应该认真考虑如何使用它。在一个真正的 Shape 类中,会有几十个方法,其中大多数是普通的装饰器不想修改的。他们应该为每个操作都设置无操作的方法,也许除了 draw()。
    猜你喜欢
    • 2019-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-12
    • 2011-09-07
    • 2011-05-19
    • 1970-01-01
    • 2022-10-14
    相关资源
    最近更新 更多