我有一个实现 observer / observable 模式的java应用程序。在我的MVC模型中,观察者类是View,而可观察类是控制器。
我的可观察类中的每个更改都使用setChanged();
和notifyObservers();
指令发送给观察者,并使用update方法更改观察者类。
这很正常,问题是在执行期间,有时用户必须使用观察者类中定义的一些JButtons
与应用程序进行交互,但我不知道如何将此信息发送到可观察的类,以便考虑到用户交互继续执行。事实上,我甚至不知道是否可以这样做。
任何帮助将不胜感激。
答案 0 :(得分:1)
在观察者模式中,您不会将数据发送到observable(通常是模型而不是控制器,但请使用适合您的方法)。
您通常要做的是在模型上定义一些操作,或者在控制器上定义一些可以调用的命令(在接口中,用于松散耦合)。然后单击该按钮将调用其中一个函数,这些函数可能会修改您喜欢的任何内容。然后,当然向所有观察者报告了这种变化,这种变化可以适应。
答案 1 :(得分:1)
通常,观察者模式用于通过两个组件在一个方向上松散地耦合通信。
在你的情况下,observable知道我观察他的其他一些对象,因此调用它的notifyObservers()
方法。
但是,观察者的另一种方式必须(直接或间接)知道可观察的(因为它必须注册/注销)本身才能得到通知。因此,你的观察者应该提到你的观察者。因此,您应该能够在观察者中处理UI事件,并导致一些委托给您的observable中的公共(或受保护)可见方法。
答案 2 :(得分:0)
实际上,如果您的View
也是Controller
,那么......你有两个Controllers
:)
您可以做的是实际实现您提到的 MVC模式:
+--------------------------------------+
| +--------------------+ |
| +---< Controller | | <- Your current "Observable"
| | +--------------------+ |
| | |
| +-----v-----+ |
| | Model <-------+ |
| +-----v-----+ | |
| | | |
| | | |
| +-----v-------------^----------+ |
| | View + Controller | | <- Your current "Observer"
| +------------------------------+ |
| |
+---------- Your application ----------+
因此, MVC模式中的当前Observer
将同时为View
和Controller
。
现在,您希望拥有一个唯一的Model
,该Observer
将是您的两个Controllers
Observable
(仍然是View
),以及您的所有Observer
将保持Model
,但现在将与您唯一的Model
相关联。
我正在谈论的那个Controllers
只会保存您的应用程序数据:
Views
您还可以使它基本上代表应用程序的内部状态。我认为这就是你在这里寻找的东西。 MVC模式将使您在灵活性方面获得很多收益:) 您可以在那里阅读更多相关信息:MVC Pattern - tutorialspoint。
答案 3 :(得分:0)
Observer可以使用Observable:
的引用在其更新方法中与Observable进行交互void update(Observable o, Object arg)
每当观察对象发生变化时,都会调用此方法。应用程序调用Observable对象的notifyObservers方法,让所有对象的观察者收到更改通知。
参数: