【发布时间】:2016-05-04 07:48:53
【问题描述】:
我有一个类,它提供了几个 api 方法,比如 methodA、methodB、methodC...,
这些方法签名是无法更改的 API。 在每种方法中,我都有非常相似的结构:
1) step1:每个方法都一样
2) step2:每个方法都一样
3) step3:不同的待办事项
有没有办法可以删除这些方法中的重复项?
【问题讨论】:
标签: android
我有一个类,它提供了几个 api 方法,比如 methodA、methodB、methodC...,
这些方法签名是无法更改的 API。 在每种方法中,我都有非常相似的结构:
1) step1:每个方法都一样
2) step2:每个方法都一样
3) step3:不同的待办事项
有没有办法可以删除这些方法中的重复项?
【问题讨论】:
标签: android
如果您在同一个类中有类似的方法,您可以使用相同的代码创建一个辅助私有方法。
如果您在不同的类中有类似的方法,那么您可以使用“模板方法”设计模式。这里有一个“模板方法”结构示例:
public abstract class SuperClass {
...
/* A template method. Shared code */
public void similarCode() {
// same for every methods
}
...
}
public class Subclass1 extends Superclass {
...
public void something() {
// different stuff todo
super.similarCode ();
// different stuff todo
}
...
}
public class Subclass2 extends Superclass {
...
public void something() {
// different stuff todo
super.similarCode ();
// different stuff todo
}
...
}
谢谢。
【讨论】:
感谢亚历克斯的回复。 我通过以下流程(命令模式)进行了重构:
1:将每个api方法提取成一个命令类xxxCommand
2:创建一个超类 BaseApiCommand。把重复的部分移到构造函数中,把类似的部分做成抽象方法,需要在具体的命令类中实现。
3:保留一个HashMap来保存命令实例:HashMap
4:在老api逻辑存在的地方,直接调用如下: commands.get("name").execute(.....);
就是这样。使用命令模式删除重复项。
【讨论】: