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

Java 传递多个参数的可观察更新,java,observable,Java,Observable,我正在构建一个包含以下类的程序: DataModel-扩展了Observable,并将标签字符串存储在GUi中 显示-实现Observer并具有我们的更新方法和标签 当控制器更改DataModel中的字符串statusText时,我调用setChanged()¬ifyObservators(this.statusText),然后在Display类中调用update(Observable o,Object arg) 我的问题是,当我有多个字符串用于不同的标签时,我应该如何继续?我的第一个想法

我正在构建一个包含以下类的程序:
DataModel-扩展了Observable,并将标签字符串存储在GUi中
显示-实现Observer并具有我们的更新方法和标签

当控制器更改DataModel中的字符串statusText时,我调用setChanged()¬ifyObservators(this.statusText),然后在Display类中调用update(Observable o,Object arg)

我的问题是,当我有多个字符串用于不同的标签时,我应该如何继续?我的第一个想法是将所有字符串放入一个列表中,然后更新方法如下所示(这是不是耦合太多?)


考虑重构一下设计。不要简单地推字符串,而是创建另一种类型来表示可能与下游视图相关的模型状态,如:

class State {
    public String lastModifiedBy;
    public String lastModifiedAt;
}
…然后让数据模型公开一个方法,该方法返回视图可以订阅的
可观察的
,如:

dataModel.bind().subscribe(
    state -> {
        status.setText(state.lastModifiedBy)

        someOtherTextView.setText(state. lastModifiedAt)
    },
    error -> {
        Log.e(getClass().getName(), error)
    }
)
提出“正确的”抽象需要一些思考,但是在视图和模型之间引入这种中间类型会使您能够独立地对它们进行演化


如果还没有,请阅读Model-View-ViewModel(MVVM)设计模式。

考虑对设计进行一点重构。不要简单地推字符串,而是创建另一种类型来表示可能与下游视图相关的模型状态,如:

class State {
    public String lastModifiedBy;
    public String lastModifiedAt;
}
…然后让数据模型公开一个方法,该方法返回视图可以订阅的
可观察的
,如:

dataModel.bind().subscribe(
    state -> {
        status.setText(state.lastModifiedBy)

        someOtherTextView.setText(state. lastModifiedAt)
    },
    error -> {
        Log.e(getClass().getName(), error)
    }
)
提出“正确的”抽象需要一些思考,但是在视图和模型之间引入这种中间类型会使您能够独立地对它们进行演化


如果还没有,请阅读模型-视图-视图-模型(MVVM)设计模式。

类似于状态机,不同的视图模型表示视图中标签文本的状态。然后更改当前状态而不是实际值,当当前状态更改时,它将传递到更新?您拥有多少视图模型取决于您-您可以在每页/屏幕上拥有一个视图模型,在每个视图上拥有一个视图模型,等等。任何对您作为设计师有意义的内容。当模型更新时,它应该发出描述状态的类的新实例,这将触发任何订阅的观察者的
onNext
,此时视图可以更新自身以反映状态中的任何相关更改。类似于状态机,不同的视图模型表示视图中标签文本的状态。然后更改当前状态而不是实际值,当当前状态更改时,它将传递到更新?您拥有多少视图模型取决于您-您可以在每页/屏幕上拥有一个视图模型,在每个视图上拥有一个视图模型,等等。任何对您作为设计师有意义的内容。当模型更新时,它应该发出描述状态的类的新实例,这将触发任何订阅观察器的
onNext
,此时视图可以更新自身以反映状态中的任何相关更改。