1

我有一个Java应用程序,实现了观察者/可观察模式。在我的MVC模型中,观察者类是视图,可观察类是控制器。从观察者发送数据到可观察

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

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

任何帮助将不胜感激。

+0

观察者应作为事件源,并像其他事件源一样发送有关observable的消息。 –

回答

1

在观察者模式中,您不会将数据发送到observable(通常是模型而不是控制器,但是可以使用适用于您的模型)。

您通常所做的是定义模型上的某些操作或您可以调用的控制器上的某些命令(在接口中用于松散耦合)。点击按钮然后会调用其中一个函数,而这些函数可能会修改您喜欢的任何内容。当然,所有这些变化都会报告给所有可以适应的观察员。

1

通常,观察者模式用于松散地耦合通过两个部件在一个方向上的通信。

在你的情况下,观察者知道我观察他的一些其他物体,因此称其为notifyObservers()方法。

但是,围绕观察者的另一种方式必须(直接或间接)知道可观察项(因为它必须注册/取消注册)本身才能获得通知。因此,你的观察者应该提供你的可观察的参考。因此,您应该能够处理观察者中的UI事件,并导致一些委派给可观察对象内的公共(或受保护)可见方法。

0

其实,如果你View也是Controller,嗯......你有两个Controllers :) 你可以做的是实际执行的MVC模式你所提到的:

+--------------------------------------+ 
|    +--------------------+ | 
|   +---<  Controller  | | <- Your current "Observable" 
|   | +--------------------+ | 
|   |       | 
| +-----v-----+      | 
| | Model <-------+    | 
| +-----v-----+  |    | 
|   |    |    | 
|   |    |    | 
| +-----v-------------^----------+ | 
| | View +  Controller  | | <- Your current "Observer" 
| +------------------------------+ | 
|          | 
+---------- Your application ----------+ 

所以你当前的Observer,在MVC模式,将是ViewController。 现在,你想拥有一个独特的Model这将是Observer你的两个Controllers(即仍然会Observable),您的所有View将继续作为一个Observer,但现在将连接到您的独特Model

Model我谈论只会保存应用程序数据,您是:

  • Controllers
  • 操纵与Views

您也可以显示它基本上代表了内部的应用状态。我认为这是你在这里寻找的东西。 MVC模式将使你获得很大的灵活性:)
你可以在这里阅读更多关于它:MVC Pattern - tutorialspoint

0

观察者可以在使用参考其更新方法可观察交互以可观察:每当所观察到的对象改变

void update(Observable o, Object arg) 

此方法被调用。应用程序调用Observable对象的notifyObservers方法,以通知所有对象的观察者有关更改。

参数:

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