所以,这是非常基本的问题,但我想我会看看是否有人能给出一个很好的解决方案。
我有两个类似的实现,它们处理不同类型的输入并根据输入调用相同的服务但不同的API,并且还根据前一个调用的响应执行一些基本操作。我正在寻找一种更好的/ logical / OOO方式来代表java代码。
public class C1 {
public O1 M1(I1 input) {
callServiceXMethodA(input.a(), input.b()....)
callServiceXMethodB(input.a(), input.b()....)
callServiceYMethodA(input.a(), input.b()....)
callServiceYMethodB(input.a(), input.b()....)
extraStep1();
}
}
public class C2 {
public O2 M2(I2 input) {
callServiceXMethodA(input.a(), input.b()....)
callServiceXMethodSTU(input.a(), input.b()....)
callServiceYMethodPQR(input.a(), input.b()....)
callServiceYMethodB(input.a(), input.b()....)
extraStep2();
}
}
我确实看到了一些模板模式(在输入上有一些层次结构)或访问者(虽然我不太相信只有两种输入类型)。
我正在考虑保留一个抽象类来放置主要块并保留抽象方法以满足具体实现中不同的值,入口点是使用公共参数将请求路由到抽象类的具体类。
有人可以建议以OOO方式干净地做到这一点吗?
答案 0 :(得分:0)
通过类和方法名称,我无法确切地告诉您需要什么。我在想的是你可以创建外墙来包装方法的逻辑,然后你可以以适合你的方式组合外墙。
如果方法无法打包到逻辑外观,则可以创建对象并使用合成。例如,如果C1是您的基础对象而C2由C1组成,您可以组合这些方法来构建一个更好的"来自C1的C2对象。当你调用C2方法时,你也可以委托给C1。