我有3个类。所有类都非常相似,但它们的实现略有不同。
class StrategyA {
double do() {
double d = method1();
method2();
return method3(d);
}
}
class StrategyB {
double do() {
double d = method1();
method2();
return method4(d);
}
}
class StrategyC {
double do() {
double d = method1();
method3();
return method4(d);
}
}
所有类都非常相似,大多数逻辑都是相同的,但在实现结束时,所有类的返回方法略有不同。这只是一个单一方法的例子,有更多的重复逻辑。
如何减少这种实施以避免重复?
Tempalte方法模式似乎很适合这个用例:
abstract class AbstractStrategy {
public final double do() {
double d = method1();
return doMoreWork(d);
}
protected abstract Double doMoreWork(Double d);
protected double method1() { return Double.valueOf(1.0d); }
protected void method2() { //do something }
protected double method3(Double d) { return Double.valueOf(d); }
protected double method4(Double d) { return Double.valueOf(d/10); }
}
class StrategyA extends AbstractStrategy {
double doMoreWork(Double d) {
method2();
return method3(d);
}
}
class StrategyB extends AbstractStrategy {
double doMoreWork(Double d) {
method2();
return method4(d);
}
}
class StrategyC extends AbstractStrategy {
double doMoreWork(Double d) {
method3();
return method4(d);
}
}