解决的正确方法是什么:
Class A {
methodDoSomeOperation() {
ClassB b.someOperation(.....);
....
}
ClassB {
someOperation(....) {
if (this.someCondition) then{
ClassC c.anotherOperation(....)
} else {
ClassD d....
}
}
}
方法c.anotherOperation
需要很长时间。我希望收到有关所选内容的通知:c.anotherOperation(....)
或d.....
,以便在调用c.anotherOperation
之前在用户界面中显示。
类似的东西:
someOperation(....) {
if (this.someCondition) then{
//notify ClassA what was selected and continue
ClassC c.anotherOperation(....)
} else {
ClassD d....
}
}
显然可以在ClassA
中调用某些方法,但这会产生强耦合和混淆逻辑。是否可以使用Spring的一些功能?
答案 0 :(得分:2)
可能是您正在寻找Decorator Pattern吗?如果每个类添加/聚合它们的部分,这将适用。
甚至是Chain of Responsibility?这可能更适用,因为每个类都可以选择进行处理。假设类A,B和C是处理对象,它们将具有定义它们将要处理的操作类型的逻辑,从而可选地执行它们的特定处理,然后传递给下一个处理对象。考虑到您似乎将A,B和C链接在一起,每个人都表现出自己的作用,这似乎最适用于您的描述。然后,为了获得哪些Processing对象发挥作用,你可以定义一个Context并沿着它传递它,每个Object都会填充它们的部分。
答案 1 :(得分:1)
你会考虑某种形式的观察者模式吗? 无论哪个类靠近UI(可能是A类?)都可以注册为B类的观察者。这可以通过添加参数来预先完成或作为对B.SomeOperation()的调用的一部分。然后当你检查B.someCondition时,你可以调用已注册的观察者,然后在C上调用长时间运行的操作。
答案 2 :(得分:1)
您想让用户在启动前取消c.anotherOperation()吗?如果是这样,那么someOperation()实际上并没有调用它。相反,它会导致显示ok / cancel对话框,并且UI将ok选项视为导致c.anotherOperation()的命令。 (也许再次通过ClassA和ClassB,取决于他们的职责。)