gpt4 book ai didi

java - 改变行为而不修改基类

转载 作者:行者123 更新时间:2023-11-30 06:40:43 25 4
gpt4 key购买 nike

我有一个类,我们称它为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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com