我对装饰器设计模式有一个小问题。似乎装饰对象与标准非装饰对象绑定到同一接口。
请参阅下面网站行的示例。https://www.tutorialspoint.com/design_pattern/decorator_pattern.htm
在本例中,RedShapeDecorator绑定到形状界面,因此RedShapeDecorator和标准Circle对象都只能调用draw()方法。
当我想让我的装饰对象能够调用比draw()更多的函数时,我该怎么做呢?如果我想让我的装饰对象有drawBlackAndWhite()和draw3D()这样的方法,而这两个方法都不适合用draw()方法包装,该怎么办?
换句话说,我希望能够扩展RedShapeDecorator来执行以下操作。
redShapeDecorator.draw()
redShapeDecorator.drawBlackAndWhite();
redShapeDecorator.draw3D();
但是 Shape 交互接口限制我只能调用 redShapeDecorator.draw()。我该如何解决这个问题?
我不确定我是否理解了这个问题,但是如果你想要一个方法< code > drawblacandwhite()(假设它是< code > redshaDecorator . draw()的类似物),你可以在你的decorator中定义额外的方法。要在装饰器中获得< code>draw3D()方法,您应该创建一个能够绘制3D对象的< code>Shape接口的新实现(因为现有的实现圆形和矩形是平面的)。如果您想在decorator的一个实例中包含所有这些方法,请在其中放置多个< code>Shape字段。但是您将无法通过引用类型< code>Shape来调用方法< code>drawBlackAndWhite()和< code>draw3D(),因为Shape接口只有一个方法< code>draw()
装饰(Decorator) Intent 为对象动态添加功能。 Class Diagram 装饰者(Decorator)和具体组件(ConcreteComponent)都继承自组件(Component),具体组件的方法实现不需要依赖于其它对象,而装饰者组合了一个组件,这样它可以装饰其它装饰者或者具体组件。所谓装饰,就是把这个装饰者套在被装饰者之上,从而动态扩展被装饰者的功能。装饰者的方法有一部分是
当我回顾了“decorator”设计模式的大量示例时,我刚刚想到了一些示例,这些示例主要是关于更改总是返回字符串的方法,或者像cost()这样聚合数字的方法。 这真的是装饰器设计模式的唯一用法吗? 我只知道它用于Java IO API。 但我想有其他的东西,打印一个文本。一些真实的东西。我找了那么多,却找不到合适的样品。
介绍 装饰者提供比继承更有弹性的替代方案。 装饰者用用于包装同接口的对象,不仅允许你向方法添加行为,而且还可以将方法设置成原始对象调用(例如装饰者的构造函数)。 装饰者用于通过重载方法的形式添加新功能,该模式可以在被装饰者前面或者后面加上自己的行为以达到特定的目的。 正文 那么装饰者模式有什么好处呢?前面说了,装饰者是一种实现继承的替代方案。当脚本运行时,在子类中增加行为会影响原有类所有的实例,而
问题内容: 假设我有一个名为的类,并且我想使用装饰器设计模式。如果我错了,请纠正我,但是要使其正常工作,我们需要创建一个装饰器类,例如,该类将保留对实例的引用,所有其他装饰器将对其进行扩展以添加功能。 我不明白为什么我们必须创建装饰器类而不是使用实例? 问题答案: 装饰器模式用于动态地(即在运行时)向对象添加功能。通常,在编写类时,对象将具有固定的功能。但是重要的一点是,对象的功能以对对象的客户端
本文向大家介绍浅谈Java设计模式系列-装饰器模式,包括了浅谈Java设计模式系列-装饰器模式的使用技巧和注意事项,需要的朋友参考一下 一、概述 装饰器模式作用是针对目标方法进行增强,提供新的功能或者额外的功能。 不同于适配器模式和桥接模式,装饰器模式涉及的是单方,和代理模式相同,而且目标必须是抽象的。 而实际上,装饰器模式和代理模式的实现方式基本一致,只在目标的存在上有些差别,这个后面我们具体讲
本文向大家介绍javascript设计模式之装饰者模式,包括了javascript设计模式之装饰者模式的使用技巧和注意事项,需要的朋友参考一下 在js函数开发中,想要为现有函数添加与现有功能无关的新功能时,按普通思路肯定是在现有函数中添加新功能的代码。这并不能说错,但因为函数中的这两块代码其实并无关联,后期维护成本会明显增大,也会造成函数臃肿。 比较好的办法就是采用装饰器模式。在保持现有函数及其内