什么是正确的模式?

时间:2012-05-18 13:53:54

标签: java spring class design-patterns

解决的正确方法是什么:

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

3 个答案:

答案 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,取决于他们的职责。)