gpt4 book ai didi

java - 装饰器设计模式绑定(bind)到同一接口(interface)

转载 作者:行者123 更新时间:2023-12-02 11:46:28 25 4
gpt4 key购买 nike

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

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

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

当我希望我的装饰对象能够调用更多内容而不是draw()时,我该怎么办?如果我希望我的装饰对象具有诸如drawBlackAndWhite()和draw3D()之类的方法,这两个方法都不适合包含在draw()方法中,该怎么办?

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

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

但是 Shape 接口(interface)限制我只能调用 redShapeDecorator.draw()。我该如何解决这个问题?

最佳答案

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

关于java - 装饰器设计模式绑定(bind)到同一接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48167171/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com