假设我有以下代码(API要求是两种几乎相似的方法):

method1() {
  ...
  internalMethod();
  ...
}

method2() {
  ...
  internalMethod();
  ...
}

internalMethod() {
  ...
  internalMethodHelper();
  ...
}

internalMethodHelper() { ... }


并假设我需要添加一个新的method3(),该实现需要internalMethod()internalMethodHelper()的另一个签名。

因此,按照我的想法,只有一种方法可以解决这种情况:

method1() {
  ...
  internalMethod(sign1);
  ...
}

method2() {
  ...
  internalMethod(sign1);
  ...
}

method3() {
  ...
  internalMethod(sign2);
  ...
}

internalMethod(sign1) {
  ...
  internalMethodHelper(sign1);
  ...
}

internalMethod(sign2) {
  ...
  internalMethodHelper(sign2);
  ...
}

internalMethodHelper(sign1) { ... }

internalMethodHelper(sign2) { ... }


我对吗 ?还是在这种情况下重载方法是非常糟糕的代码设计?

感谢您的所有回答!

最佳答案

IMHO方法重载不是代码异味。如果您需要在此上下文中重载方法,请执行此操作。设计模式不是工具,而是规则。应该明智地使用它们,切勿强行使用。

另外,如果您编写新类并在其中添加该方法,则请自己问这些问题。


新班级会按照所说的去做吗?
编写的方法是否如其所说?


如果是,则可以提取方法并放入其他类型。否则,请坚持超载,这里没有糟糕的设计。

10-05 21:09