假设我有以下代码(两个几乎相似的方法是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) { ... }
我是对的吗?或者在这种情况下重载方法的代码设计非常糟糕?
感谢您的所有答案!
答案 0 :(得分:2)
在这种情况下Strategy pattern可能 帮助你。
Strategy Design Pattern - GOF更好地解释了:
策略模式是一种设计模式,允许定义一组类似的算法并将其封装在自己的类中。然后可以根据您的要求在运行时选择用于特定目的的算法。
策略模式用于创建可互换的算法系列,在运行时从中选择所需的过程。
这允许程序的行为根据配置详细信息或用户首选项动态更改。
通过允许新算法在未来轻松合并,也可以提高灵活性。
答案 1 :(得分:0)
恕我直言方法重载不是代码嗅觉。如果您需要在此上下文中重载方法,那么就这样做。 设计模式是工具而不是规则。它们应该明智地使用&不能强迫。
另外,如果你写新课程&把那个方法放在里面,然后问自己这些问题。
新课程是否符合其要求?
用它写的方法是否符合它的说法?
如果是,那么可以提取方法&放入其他类型。否则坚持超载,这里没有什么不好的设计。