我有一个抽象类,如下所示。对于这个抽象类,我有两个具体的类。我的问题是,其中一个具体类需要实现class2不需要的方法。所以我不想在抽象类中调用该方法,因为并不是所有的具体化都依赖于它。但是调用代码将调用抽象类中的execute()方法。它是程序的入口点。我的问题是我该如何重构它?
Abstract class A{
abstract void doOne();
abstract void doTwo();
public void execute(){
//.... Lots of common code used by both Class1 and Class2
doOne();
//....
doTwo()
//...
//Method should only be implemented by Class 1 and not by Class 2
CallOnlyClass1()
}
}
Class class1 extends A{
}
Class class2 extends A{发布于 2021-04-09 10:48:49
为了避免在抽象中泄漏具体细节,从而使设计不那么落后,您可以做的是使扩展点不那么具体。
例如,如果您将方法命名为postExecute,那么您就允许Class2在该扩展点调用它自己的方法。如果postExecute并不总是需要实现,那么您可以在抽象类中有一个默认的空实现。
在不了解具体模型和问题的情况下,我不能真正提出替代设计,但您也可以尝试使用组合而不是继承和模板方法。
https://stackoverflow.com/questions/67010628
复制相似问题