Java 正确的模式是什么?
解决以下问题的正确方法是什么:Java 正确的模式是什么?,java,spring,class,design-patterns,Java,Spring,Class,Design Patterns,解决以下问题的正确方法是什么: Class A { methodDoSomeOperation() { ClassB b.someOperation(.....); .... } ClassB { someOperation(....) { if (this.someCondition) then{ ClassC c.anotherOperation(....) } else { ClassD d.... } } } 方法c.另一种手术耗时较长。我希望
Class A {
methodDoSomeOperation() {
ClassB b.someOperation(.....);
....
}
ClassB {
someOperation(....) {
if (this.someCondition) then{
ClassC c.anotherOperation(....)
} else {
ClassD d....
}
}
}
方法c.另一种手术耗时较长。我希望收到有关所选内容的通知: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的某些功能?是否您正在寻找一个新的功能?如果每个类都添加/聚合了它们的部分,这将适用
或者甚至是一个?这可能更适用,因为每个类都可以选择进行处理。假设类A、B和C是处理对象,它们的逻辑将定义它们将处理的操作类型,从而选择性地执行它们的特定处理,然后传递给下一个处理对象。考虑到您似乎将A、B和C链接在一起,每一个都在发挥各自的作用,这似乎最适合您的描述。然后,为了得到哪个处理对象完成了它们的部分,您可以定义一个上下文并沿着链传递它,每个对象都将填充它们的部分。您是否在寻找一个上下文?如果每个类都添加/聚合了它们的部分,这将适用
或者甚至是一个?这可能更适用,因为每个类都可以选择进行处理。假设类A、B和C是处理对象,它们的逻辑将定义它们将处理的操作类型,从而选择性地执行它们的特定处理,然后传递给下一个处理对象。考虑到您似乎将A、B和C链接在一起,每一个都在发挥各自的作用,这似乎最适合您的描述。然后,为了得到某个处理对象的指示,可以定义上下文并将其传递到链上,每个对象都会填充它们的部分。
你会考虑观察者模式的某种形式吗?
任何靠近UI的类(可能是类A?)都可以注册为类B的观察者。这可以提前完成,也可以通过添加参数作为调用B.SomeOperation()的一部分完成。然后,当你检查B.SoMeVeCube,你可以调用注册的观察员,然后调用长运行的操作C.< /P> < P>你会考虑某种形式的观察者模式吗?
任何靠近UI的类(可能是类A?)都可以注册为类B的观察者。这可以提前完成,也可以通过添加参数作为调用B.SomeOperation()的一部分完成。然后,当您执行检查B.someCondition时,您可以调用已注册的观察者,然后调用C上的长时间运行操作。您想让用户在开始之前取消C.另一个操作()吗?如果是这样,那么someOperation()实际上不会调用它。相反,它会导致显示“确定/取消”对话框,用户界面会将“确定”选项视为一个命令,该命令将导致c.anotherOperation()。(可能再次通过ClassA和ClassB,具体取决于他们的职责。)您想让用户在开始之前取消c.另一个操作()吗?如果是这样,那么someOperation()实际上不会调用它。相反,它会导致显示“确定/取消”对话框,用户界面会将“确定”选项视为一个命令,该命令将导致c.anotherOperation()。(可能再次通过ClassA和ClassB,取决于他们的职责。)装饰者或责任链似乎与此问题无关。对侦听器模式不太确定。我将添加更多细节来更好地解释自己。装饰者或责任链似乎与此问题无关。对侦听器模式不太确定。我将添加更多细节,以便更好地解释我自己。根据方法结果提供条件开关,完全在XML中配置,而类彼此不了解。看看它是否适合您的项目,它根据方法结果提供条件切换,完全用XML配置,而类彼此不了解。看看它是否适合你的项目