我的代码有以下情况。
class A{
public void putLogicHere(){
//method is about 500 lines long.
//Initial Few lines of code will be common
//middle part of code will be customized by its subclasses
//Again here comes few lines of common code
}
}
class B extends A{}
class C extends A{}
在设计层面,我应该采取什么方法来进一步打破这段代码?考虑到方法的中间部分将由层次结构中的其他人自定义。
答案 0 :(得分:5)
我会将A类作为abstract
类,并在其中创建一个抽象方法,如:
abstract void doAdditionalStuff(/*needed parameters from class A*/);
并在A中使用它:
public void putLogicHere(){
//Initial Few lines of code will be common
//Here use the abstract method implemented in subclasses
doAdditionalStuff();
//Again here comes few lines of common code
}
然后,B类和C类可以实现该方法:
@Override
doAdditionalStuff() {
//middle part of code will be customized by its subclasses
}
答案 1 :(得分:0)
将业务逻辑的概念视为
所以:
(abstract) class Base {
public final void oneService() {
...
U u = requirementX(X x);
...
V v = requirementY(Y y);
...
}
protected U requirementX(X x) {
}
abstract protected V requirementY(Y y);
}
class Aaa extends Base { ... }
class Bbb extends Base { ... }
注意:
使用Java 8代替受保护方法的继承,设置一些函数指针/ lambda参数有时可能会更好。