java - 传递多个参数的可观察更新

标签 java observable

我正在构建一个具有以下类的程序:
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/

相关文章:

java - Spring Rest RequestMethod.GET 返回 400 Bad Request for @RequestParam required=true 丢失时

java - 如何从一维数组填充二维数组的列

java - 从java开始的问题

flutter - 如何使用 getx 包在 Flutter 中使列表可观察?

angular - 是什么导致可观察到的返回结果和在浏览器中显示结果之间的滞后?

java - 谁能帮我解释为什么我的 GUI 在循环运行时不可点击?

java - 为什么 Hibernate TableSequence 会递减?

c# - 如何在 C# 中将函数附加在一起?

android - 如何使用 Maybe 运算符检查可空性

Angular 服务在每次调用时都会重置