Java 绑定到同一接口的装饰器设计模式
我对装饰设计模式有一个小问题。装饰对象似乎与标准的非装饰对象绑定到同一接口 请参阅下面网站行的示例。 在本例中,RedShapedCorator绑定到shape接口,因此RedShapedCorator和标准圆对象只能调用draw()方法 那么,当我希望我的装饰对象能够调用more而不是draw()时,我该怎么办呢。如果我想让装饰过的对象具有drawBlackAndWhite()和draw3D()等方法,这两种方法都不适合在draw()方法中封装,该怎么办 换句话说,我希望能够扩展RedShapeDecorator以执行以下操作Java 绑定到同一接口的装饰器设计模式,java,design-patterns,Java,Design Patterns,我对装饰设计模式有一个小问题。装饰对象似乎与标准的非装饰对象绑定到同一接口 请参阅下面网站行的示例。 在本例中,RedShapedCorator绑定到shape接口,因此RedShapedCorator和标准圆对象只能调用draw()方法 那么,当我希望我的装饰对象能够调用more而不是draw()时,我该怎么办呢。如果我想让装饰过的对象具有drawBlackAndWhite()和draw3D()等方法,这两种方法都不适合在draw()方法中封装,该怎么办 换句话说,我希望能够扩展RedSha
redShapeDecorator.draw()
redShapeDecorator.drawBlackAndWhite();
redShapeDecorator.draw3D();
但是,由于面的形状限制,我只能调用RedShapedCorator.draw()。我如何解决这个问题 我不确定我的问题是否正确,但是如果您想要一个方法
drawBlackAndWhite()
(假设它类似于RedShapeCorator.draw()
),您可以在装饰器中定义其他方法。要在decorator中获得draw3D()
方法,您应该创建一个新的Shape
接口实现,该接口能够绘制三维对象(因为现有的实现圆形和矩形是平面的)。如果您想在一个decorator实例中使用所有这些方法,请在其中放置多个Shape
字段。但是您将无法通过引用typeShape
调用方法drawBlackAndWhite()
和draw3D()
,因为Shape接口只有一个方法draw()
或者您将这两个方法添加到Shape
接口,或者它不再是装饰图案。您可能想要外观图案,不是装修工。当然,您也可以将方法添加到decorator中并将其实例化(不是作为接口,而是作为类),但再一次—它不再是decorator,而且据我所知,这是一种不好的做法。