Java 避免重写Decorator中的所有方法
我最近一直在学习设计模式,对Decorator有一个疑问。对我来说,在类方法上添加额外功能是非常有用的 但是,当处理具有多个方法的类时,必须重写所有方法,即使根本没有扩展,每个方法的结尾都类似于以下内容:Java 避免重写Decorator中的所有方法,java,design-patterns,decorator,Java,Design Patterns,Decorator,我最近一直在学习设计模式,对Decorator有一个疑问。对我来说,在类方法上添加额外功能是非常有用的 但是,当处理具有多个方法的类时,必须重写所有方法,即使根本没有扩展,每个方法的结尾都类似于以下内容: @覆盖 公共void whateverMethod(){ 修饰。whateverMethod(); } 必须为所有方法编写这些东西(即使只有两三种方法)对我来说似乎很不理想。我是不是误解了什么?还有其他模式可以解决这个问题吗?如果装饰一个类:准备EmptyDecorator并在创建更多装饰器
@覆盖
公共void whateverMethod(){
修饰。whateverMethod();
}
必须为所有方法编写这些东西(即使只有两三种方法)对我来说似乎很不理想。我是不是误解了什么?还有其他模式可以解决这个问题吗?如果装饰一个类:准备
EmptyDecorator
并在创建更多装饰器时使用它
抽象类动物{
抽象字符串move();
抽象字符串speak();
}
类EmptyDecorator扩展了Animal{
下游动物;
字符串移动(){
返回下游。移动();
}
字符串说话(){
返回下游;
}
}
类YourDecorator扩展EmptyDecorator{
...
}
如果装饰接口:准备自己的接口扩展该接口并添加默认方法:
界面动物{
字符串move();
字符串speak();
}
接口EmptyDecorator扩展了Animal{
下游动物();
默认字符串移动(){
返回下游().move();
}
默认字符串speak(){
返回下游().speak();
}
}
类YourDecorator实现EmptyDecorator{
下游动物;
@凌驾
公共动物{
返回下游;
}
}
不是一个模式,而是一个库。可以提供帮助,但在泛型方面有其特殊情况。这和大多数现代IDE将为您生成所有这些签名;在某些方面,你可能会争辩说,与其让它们轻易被忽略,不如强制实施它们。这有什么帮助?他知道装饰器是如何工作的。而且,这只会将问题从具体的装饰器转移到接口上。是的,但它是可重用的。您只需执行一次,就可以创建更多的装饰器,而无需所有覆盖。假设您要创建20个装饰器,这有助于避免在每个装饰器中重复所有这些代码。