我有一个类,我们将其称为 A
,其方法为 foo(/*with some params*/)
。我已经在我的代码中使用了该类。现在,如果我传递给上述方法的某些参数 bar
具有特定值,我希望我的 foo()
方法返回略有不同的结果。
显然,我可以创建一个类 B
并复制 foo
方法的代码,对其进行一些更改以满足我的需要,并在运行时检查 bar 的值
并决定调用哪个类。
是否可以使用某种设计模式来进行更改,并记住以下要求:a)在我的代码中继续使用 A
(可能使用 InterfaceA
并使用而不是 A
),所以我不必更改它
b) 不要修改类 A
的代码,因为稍后可能会出现一个类 C
,其 foo()
和另一个,然后另一个......
最佳答案
您可以定义B
,它将扩展A
实现的接口(interface),并将A
(或者更好的是接口(interface)类型)作为字段.
interface AbstractA {
void foo(Object o);
}
class A implements AbstractA {
@Override
public void foo(Object o) {}
}
class B implements AbstractA {
private AbstractA abstractA;
@Override
public void foo(Object o) {
abstractA.foo(o);
// "a slightly different result"
}
}
这是装饰器模式的一个示例,as Wikipedia puts it ,
allows behavior to be added to an individual object, dynamically, without affecting the behavior of other objects from the same class.
关于java - 无需修改基类即可更改行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57268846/