【发布时间】:2020-05-16 21:12:21
【问题描述】:
我需要实现两个类似的流程,它们基本上执行相同的逻辑,但一些参数/方法可能不同。我想知道将主要逻辑提取到父类并将一些方法的结果指定给子类是否是一种好习惯。比如:
abstract class Parent{
protected CommonDao commonDao;
protected String specStatus;
protected abstract int getDbResult();
public Parent(CommonDao commonDao){
this.commonDao = commonDao;
}
public String mainLogic(){
if(commonMethod()){
//..
}
int specDbResult = getDbResult();
//some logic here
return specStatus;
}
private boolean commonMethod(){
//..
return true;
}
}
@Service
public Child1 extends Parent(){
@Autowired
public Child1(CommonDao commonDao){
super(commonDao);
super.specStatus = specStatus1;
}
@Override
protected String getDbResult(){
commonDao.getResult1();
}
}
@Service
public Child2 extends Parent(){
@Autowired
public Child2(CommonDao commonDao){
super(commonDao);
super.specStatus = specStatus2;
}
@Override
protected String getDbResult(){
commonDao.getResult2();
}
}
如果它看起来不是一个干净的代码,在这种情况下您会推荐什么解决方案? 提前致谢
【问题讨论】:
-
感谢您的评论。它看起来与我的代码相似,它也是某种算法,需要执行哪些步骤,但在我的代码中,孩子之间的大部分逻辑应该是相同的(因此粘贴到父类)。区别主要在于几个参数,调用另一个dao方法。
标签: spring inheritance template-method-pattern