1

正确的解决方法是什么:

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 的某些功能?

4

3 回答 3

2

可能是您在寻找装饰器模式吗?如果每个类都添加/聚合它们的部分,这将适用。

甚至是责任链?这可能更适用,因为每个类都可以选择性地进行处理。假设 A、B 和 C 类是处理对象,它们将具有定义它们将进行何种操作的逻辑,因此可以选择执行它们的特定处理,然后传递给下一个处理对象。考虑到您似乎将 A、B 和 C 链接在一起,每个都各司其职,这似乎最适合您的描述。然后,要了解哪些处理对象发挥了作用,您可以定义一个上下文并将其沿链传递,每个对象将填充它们的部分。

于 2012-05-18T14:00:01.730 回答
1

你会考虑某种形式的观察者模式吗?无论哪个更接近 UI 的类(可能是 A 类?)都可以注册为 B 类的观察者。这可以预先完成,也可以通过添加参数作为对 B.SomeOperation() 的调用的一部分。然后当你检查 B.someCondition 时,你可以调用注册的观察者然后调用 C 上的长时间运行的操作。

于 2012-05-18T14:25:07.210 回答
1

你想让用户有机会在 c.anotherOperation() 开始之前取消它吗?如果是这样,那么 someOperation() 实际上并没有调用它。相反,它会导致显示 ok/cancel 对话框,并且 UI 将 ok 选项视为导致 c.anotherOperation() 的命令。(也许又是 ClassA 和 ClassB,取决于他们的职责。)

于 2012-05-18T15:15:27.700 回答