我正在构建一个具有以下类的程序:
DataModel - 扩展 Observable 并在 GUI 中存储标签的字符串
显示 - 实现观察者并具有我们的更新方法和标签
当 Controller 对 DataModel 中的字符串 statusText 进行更改时,我调用 setChanged() 和 notificationObservers(this.statusText),然后调用 Display 类中的 update(Observable o, Object arg)。
我的问题是,当我有不同标签的多个字符串时,我应该如何进行?我的第一个想法是将所有字符串放入一个列表中,然后 update 方法如下所示(这是否耦合太多?):
if (arg != null && arg instanceof String[]) {
Platform.runLater(new Runnable() {
@Override
public void run() {
String[] strings = (String[]) arg;
status.setText(strings[0]);
}
});
}
最佳答案
考虑稍微重构一下设计。创建另一种类型来表示可能与下游 View 相关的模型状态,而不是简单地推送字符串,例如:
class State {
public String lastModifiedBy;
public String lastModifiedAt;
}
...然后让 DataModel 公开一个返回 Observable<State>
的方法。 View 可以订阅,例如:
dataModel.bind().subscribe(
state -> {
status.setText(state.lastModifiedBy)
someOtherTextView.setText(state. lastModifiedAt)
},
error -> {
Log.e(getClass().getName(), error)
}
)
提出“正确的”抽象需要一些思考,但是在 View 和模型之间引入中间类型可以让您有能力使它们相互独立地发展。
如果您还没有阅读过 Model-View-ViewModel (MVVM) 设计模式,请阅读它。
关于java - 传递多个参数的可观察更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48251995/