如何解决避免必须重写Decorator中的所有方法
我最近一直在学习设计模式,并对Decorator有疑问。对我来说,很明显在类方法上添加额外的功能是多么有用。
但是,当处理具有多个方法的类时,即使根本没有扩展,也必须重写所有方法,每个方法都以类似于以下的内容结尾:
@Override
public void whateverMethod() {
decorated.whateverMethod();
}
必须为所有方法(即使只有两个或三个)编写这些东西,这对我来说似乎不是最佳选择。我误会了吗?还有另一种模式可以解决这个问题吗?
解决方法
如果要装饰一个类:准备EmptyDecorator
并在制作更多装饰器时使用它
abstract class Animal {
abstract String move();
abstract String speak();
}
class EmptyDecorator extends Animal {
Animal downstream;
String move() {
return downstream.move();
}
String speak() {
return downstream.speak();
}
}
class YourDecorator extends EmptyDecorator {
...
}
如果装饰一个接口:准备自己的接口以扩展该接口并添加默认方法:
interface Animal {
String move();
String speak();
}
interface EmptyDecorator extends Animal {
Animal downstream();
default String move() {
return downstream().move();
}
default String speak() {
return downstream().speak();
}
}
class YourDecorator implements EmptyDecorator {
Animal downstream;
@Override
public Animal downstream() {
return downstream;
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。