9

この質問は、MVC (Model-View-Controller) に関するものです。私のモデルは現在、Java で Observer / Observable パターンを使用して変更されたときにビューを更新します。

public class Model extends Observable {
}

public class View implements Observer {

    @Override
    public void update(observable o, Object obj) {
        // ... update the view using the model.
    }

}

これはうまくいきます。ただし、私のモデルはより複雑になり、他のクラスのリストを保持し始めています。

public class Model extends Observable {
    List<Person> people = new ArrayList<Person>();
}

public class Person {
    private String name = "";
    // ... getter / setter for name
}

私の問題は、人の名前が変更されたときに、その人を含むモデルをリッスンするビューを更新したいということです。私が考えることができる唯一の方法は、Model に Observer クラスを実装させ、Person に Observable クラスを拡張させることです。次に、Person が変更されると、オブザーバー (親モデルを含む) に通知します。

ただし、モデルが複雑になると、これは大変な作業のように思えます。親モデルへの変更を「バブルアップ」するためのより良い方法はありますか?

4

2 に答える 2

4

まず第一に、このクラスを使用するには拡張する必要があるため、通常、使用するのは悪い考えです。 いずれにせよ、あなたが説明しているのは、観測されたエンティティの集約です。 単純なことを複雑にしないでください。各エンティティをオブザーバブルにして、登録と通知を処理させます。すべてを集約するという名前のクラスを具体的に含める必要はありませんあなたのデザインを壊してください。Observable

Model

于 2012-11-04T21:21:12.717 に答える
1

サブクラスを、含まれている のインスタンスにいつでも委譲Observableさせることができます。オブザーバーパターンを実装するその他の方法については、こちらで説明しています。

于 2012-11-04T21:35:03.060 に答える