繁体   English   中英

装饰器设计模式绑定到同一接口

[英]Decorator Design Pattern tied to same interface

装饰器设计模式有一个小问题。 装饰对象似乎与标准非装饰对象绑定到相同的接口。

请参见下面的网站行示例。 https://www.tutorialspoint.com/design_pattern/decorator_pattern.htm

在此示例中,RedShapeDecorator绑定到shape接口,因此RedShapeDecorator和标准Circle对象只能调用draw()方法。

好吧,当我希望装饰的对象能够调用更多然后draw()的方法时,该怎么办。 如果我希望装饰的对象具有诸如drawBlackAndWhite()和draw3D()之类的方法,而这两种方法都不适合用draw()方法包装,该怎么办?

换句话说,我希望能够扩展RedShapeDecorator来执行以下操作。

redShapeDecorator.draw()
redShapeDecorator.drawBlackAndWhite();
redShapeDecorator.draw3D();

但是Shape接口使我只能调用redShapeDecorator.draw()。 我该如何解决?

我不确定问题是否正确,但是如果您想要方法drawBlackAndWhite() (假设它类似于RedShapeDecorator.draw() ),则可以在装饰器中定义其他方法。 要在装饰器中获取draw3D()方法,您应该创建一个Shape界面的新实现,该接口能够绘制3D对象(因为现有的Circle和Rectangle实现是平坦的)。 如果要将所有这些方法放在装饰器的一个实例中,请在其中放置多个Shape字段。 但是您将无法通过Shape类型的引用调用方法drawBlackAndWhite()draw3D() ,因为Shape接口只有一个方法draw()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM