在这种情况下我应该使用什么代码设计?

时间:2014-07-19 21:09:58

标签: java design-patterns

假设我有以下代码(两个几乎相似的方法是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) { ... }

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

感谢您的所有答案!

2 个答案:

答案 0 :(得分:2)

在这种情况下Strategy pattern可能 帮助你。

Strategy Design Pattern - GOF更好地解释了:

  

策略模式是一种设计模式,允许定义一组类似的算法并将其封装在自己的类中。然后可以根据您的要求在运行时选择用于特定目的的算法。

策略模式用于创建可互换的算法系列,在运行时从中选择所需的过程

这允许程序的行为根据配置详细信息或用户首选项动态更改。

通过允许新算法在未来轻松合并,也可以提高灵活性。

enter image description here

答案 1 :(得分:0)

恕我直言方法重载不是代码嗅觉。如果您需要在此上下文中重载方法,那么就这样做。 设计模式是工具而不是规则。它们应该明智地使用&不能强迫。

另外,如果你写新课程&把那个方法放在里面,然后问自己这些问题。

  • 新课程是否符合其要求?

  • 用它写的方法是否符合它的说法?

如果是,那么可以提取方法&放入其他类型。否则坚持超载,这里没有什么不好的设计。