你好程序员和建筑师!
我是新来的......我想我的英语可能......太可怕了! :-D
所以...请小心我......拜托。
我有一个关于JavaFX,FXML以及切换场景的各种方法的架构问题,在所有场景中保存数据...... 我使用了个人解决方案,我需要知道它是否是一个可接受的解决方案(在架构层面)。
我会尝试解释我的解决方案
我使用了一种"反向"观察者模式:对每个观察者使用许多观察者,我使用了一个观察者(一个特定的类)和许多可观察者(所有控制者)。
因此,当它改变场景时,当前场景的控制器会通知观察者这样做。观察者删除旧场景并加载新场景。
一些细节。
我创建了一个名为SceneObserver的类,它实现了java.util.Observer
我使用SceneObserver来:
我的所有控制器都扩展了java.util.Observable(这是一个例子)
当场景中发生某种情况并且需要切换场景时,场景会向SceneObserver通知更改(观察者模式),SceneObserver会破坏旧场景并加载新场景。
换句话说,我只使用一个观察者来观察所有控制器(观察模式的反转)。
一切正常,但我知道这还不够!
所以,问题是:在架构层面发言,这是一个可接受的解决方案吗?
我知道,这不是唯一的,当然还有其他更好的方法,但......这个怎么样?
为什么我使用这个解决方案?
嗯,有两个原因:
感谢所有人......对不起我的英语: - (
答案 0 :(得分:1)
嗯...
之后,我已经阅读并测试了不同的解决方案,我建议您阅读: <击> https://web.archive.org/web/20160316234709/ 击>
<击> https://blogs.oracle.com/acaicedo/entry/managing_multiple_screens_in_javafx1 击>
https://github.com/google/guava/wiki/EventBusExplained
http://eventbus.org/
我决定使用更简单的方法实现自己的解决方案:路由器模式。
我的目标是在我的JavaFX应用程序中解耦各种控制器,从而可以在之间进行通信。
而不是使用事件处理程序,参数或过时的事件总线,似乎一个简单的路由器模式可以解决这个问题。
每个控制器必须知道路由器(显然是一个单独的),路由器必须知道每个控制器。通过这种方式,我简单地将多对多的阶级关系转化为一对多的关系而没有任何关于#34;太神奇的&#34;我可以在控制器之间发送各种消息。在小:
在路由器中,我为每个控制器和set方法声明一个属性,以便准确链接控制器的实例,如下所示:
public class Router {
private MainCtrl mainCtrl;
...
protected void setMainCtrl(MainCtrl mainCtrl) {
this.mainCtrl = mainCtrl;
}
}
然后,在每个控制器中我声明一个Router对象(router
),并在每个控制器的initialize()
方法中我写这个(路由器必须是一个单独的!):
public void initialize() {
router.setMainCtrl(this);
...
}
这就是全部。