Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 避免重写Decorator中的所有方法_Java_Design Patterns_Decorator - Fatal编程技术网

Java 避免重写Decorator中的所有方法

Java 避免重写Decorator中的所有方法,java,design-patterns,decorator,Java,Design Patterns,Decorator,我最近一直在学习设计模式,对Decorator有一个疑问。对我来说,在类方法上添加额外功能是非常有用的 但是,当处理具有多个方法的类时,必须重写所有方法,即使根本没有扩展,每个方法的结尾都类似于以下内容: @覆盖 公共void whateverMethod(){ 修饰。whateverMethod(); } 必须为所有方法编写这些东西(即使只有两三种方法)对我来说似乎很不理想。我是不是误解了什么?还有其他模式可以解决这个问题吗?如果装饰一个类:准备EmptyDecorator并在创建更多装饰器

我最近一直在学习设计模式,对Decorator有一个疑问。对我来说,在类方法上添加额外功能是非常有用的

但是,当处理具有多个方法的类时,必须重写所有方法,即使根本没有扩展,每个方法的结尾都类似于以下内容:

@覆盖
公共void whateverMethod(){
修饰。whateverMethod();
}

必须为所有方法编写这些东西(即使只有两三种方法)对我来说似乎很不理想。我是不是误解了什么?还有其他模式可以解决这个问题吗?

如果装饰一个类:准备
EmptyDecorator
并在创建更多装饰器时使用它

抽象类动物{
抽象字符串move();
抽象字符串speak();
}
类EmptyDecorator扩展了Animal{
下游动物;
字符串移动(){
返回下游。移动();
}
字符串说话(){
返回下游;
}
}
类YourDecorator扩展EmptyDecorator{
...
}
如果装饰接口:准备自己的接口扩展该接口并添加默认方法:

界面动物{ 字符串move(); 字符串speak(); } 接口EmptyDecorator扩展了Animal{ 下游动物(); 默认字符串移动(){ 返回下游().move(); } 默认字符串speak(){ 返回下游().speak(); } } 类YourDecorator实现EmptyDecorator{ 下游动物; @凌驾 公共动物{ 返回下游; } }
不是一个模式,而是一个库。可以提供帮助,但在泛型方面有其特殊情况。这和大多数现代IDE将为您生成所有这些签名;在某些方面,你可能会争辩说,与其让它们轻易被忽略,不如强制实施它们。这有什么帮助?他知道装饰器是如何工作的。而且,这只会将问题从具体的装饰器转移到接口上。是的,但它是可重用的。您只需执行一次,就可以创建更多的装饰器,而无需所有覆盖。假设您要创建20个装饰器,这有助于避免在每个装饰器中重复所有这些代码。