gpt4 book ai didi

java - 有没有更好的方法来创建一个扩展另一个抽象类并添加新功能的抽象类?

转载 作者:行者123 更新时间:2023-11-29 04:24:23 24 4
gpt4 key购买 nike

我有一个抽象类,它有一个具体方法 solvesolve 使用的几个抽象方法:

public abstract class A{
public void solve(){
//code for solve

}

public abstract void a();
public abstract void b();
}

然后我有另一个扩展 A 的类 B,使用 A 的抽象方法重新实现 solve 方法> 和新添加的 (c,d)。它还有一个 boolean 字段,指示它是否必须使用 solve A 或来自 B 的那个。

public abstract class B extends A{
boolean useA;
public B(boolean useA){
this.useA = useA
}
public void solve(){
if(useA) super.solve();
else // code for solve
}

public abstract void c();
public abstract void d();
}

然后我有一个扩展 B 的具体类 C,实现所有方法并有一个 boolean 值来指示是否必须使用 solve 。

public class C extends B{

public C(boolean useA){
super(useA);
}

... //code for a,b,c and d
}

有什么办法可以做得更好吗?我认为这可能没有遵循 OOP 的原则。

最佳答案

有些已经提到了装饰者模式,还有策略模式。

然而,人们可能会使用 lambda 来注入(inject)一些处理程序。

处理程序可以使用公共(public)服务/ protected 要求来完成:

class A {
public final f() {
...
onF(x, y);
}

protected abstract void onF(X x, Y y);
}

解决方案复合体通常没有继承更好,但作为领域,委派给领域。

@LonelyNeuron 的回答给出了很好的论据。

简而言之:当有疑问时,先将其编码出来,然后将其重构为某种优雅的模型。分离关注点等。

关于java - 有没有更好的方法来创建一个扩展另一个抽象类并添加新功能的抽象类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47162175/

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