将数据从观察者发送到可观察的

时间:2014-01-09 21:19:17

标签: java model-view-controller jframe observer-pattern observable

我有一个实现 observer / observable 模式的java应用程序。在我的MVC模型中,观察者类是View,而可观察类是控制器。

我的可观察类中的每个更改都使用setChanged();notifyObservers();指令发送给观察者,并使用update方法更改观察者类。

这很正常,问题是在执行期间,有时用户必须使用观察者类中定义的一些JButtons与应用程序进行交互,但我不知道如何将此信息发送到可观察的类,以便考虑到用户交互继续执行。事实上,我甚至不知道是否可以这样做。

任何帮助将不胜感激。

4 个答案:

答案 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将同时为ViewController。 现在,您希望拥有一个唯一的Model,该Observer将是您的两个Controllers Observable(仍然是View),以及您的所有Observer将保持Model,但现在将与您唯一的Model相关联。

我正在谈论的那个Controllers只会保存您的应用程序数据:

  • 使用Views
  • 进行操作
  • 显示{{1}}

您还可以使它基本上代表应用程序的内部状态。我认为这就是你在这里寻找的东西。 MVC模式将使您在灵活性方面获得很多收益:) 您可以在那里阅读更多相关信息:MVC Pattern - tutorialspoint

答案 3 :(得分:0)

Observer可以使用Observable:

的引用在其更新方法中与Observable进行交互
void update(Observable o, Object arg)

每当观察对象发生变化时,都会调用此方法。应用程序调用Observable对象的notifyObservers方法,让所有对象的观察者收到更改通知。

参数:

  • o - 可观察对象。
  • arg - 传递给notifyObservers方法的参数。