我正在尝试使用装饰器模式修改对象的行为,但遇到了一些障碍,装饰器模式似乎无法按照我想要的方式更改对象的功能。
这是我正在尝试做的一个简单示例:
我有一个带有 getter 的类,用于 int 和其他一些使用 getter 进行计算的“复杂”
public class MyClass implements MyInterface {
private int value = 5;
@Override
public int getValue() {
return value;
}
@Override
public int complexStuff() {
return 50 + getValue();
}
}
我有一个抽象装饰器,它只是将接口定义的所有调用传递给 MyClass 实例
public abstract class MyDecorator implements MyInterface {
private MyClass decorated;
public MyDecorator(MyClass decorated) {
this.decorated = decorated;
}
@Override
public int getValue() {
return decorated.getValue();
}
@Override
public int complexStuff() {
return decorated.complexStuff();
}
}
我希望能够装饰一个MyClass
实例以修改getValue()
方法的行为,这种方式complexStuff()
也会受到影响。
例如,如果我像这样装饰 MyClass 实例:
MyDecorator myDecorator = new MyDecorator(myClassInstance) {
@Override
public int getValue() {
return 100;
}
};
我目前实现这种调用的方式myDecorator.getValue()
将返回 100,但调用myDecorator.complexStuff()
将返回 55,就好像MyClass
实例没有被修饰一样。我想要的是myDecorator.complexStuff()
返回 150 的调用。
有没有办法可以修改我对装饰器模式的使用以达到我想要的结果?或者我可以用来让它按我想要的方式工作的其他模式/解决方案?
谢谢