2

Observable と Observer を使用しながら MVC 構造をよりよく理解しようとしています。ファイルを比較するプログラムを実装することでそうしようとしています。ビューにファイルのリストといくつかの統計データを表示したいと考えています。ビューを別のデータで更新するにはどうすればよいですか?

たとえば、統計が変更された場合、統計オブジェクトをビューに送信して、表示を更新できるようにします。しかし同時に、ファイルのリストが変更された場合は、ArrayList をビューに送信して、表示を更新できるようにします。両方に同じ更新方法を使用しますか? もしそうなら、instanceofが何であるかを確認し、それに応じて表示するようにビューを見てもらいますか?

4

1 に答える 1

4

MVC がどのように機能するかを示す良い例は、Swing フレームワークです。すべての状態変化は 1 種類のイベントを発生させ、それらの変化について知りたいオブジェクトはリスナー (別名オブザーバー) を実装します。

したがって、要約すると、次のように、StatisticsListener という 1 つのインターフェイスを作成する必要があります。

public interface StatisticsListener {
     public void statisticsChanged(StatisticsEvent evt);
}

イベント StatisticsEvent を使用すると、次のようになります。

public class StatisticsEvent {
    private final Statistics changedStatistics;

    public StatisticsEvent(Statistics changedStatistics){
         this.changedStatistics = changedStatistics;
    }

    public Statistics getChangedStatistics(){
         return this.changedStatistics;
    }
}

... そして、統計を処理するクラスで、イベントを発生させます。

public class ClassThatHandlesStatistics {
    private final List<StatisticsListener> listeners = new CopyOnWriteArrayList<StatisticsListener>();

    public void doSomething(){
         Statistics changed ... //do your logic
         fireStatisticsChanged(new StatisticsEvent(changed));
    }

    protected void fireStatisticsChanged(StatisticsEvent evt){
        for (StatisticsListener listener : listeners){
             listener.statisticsChanged(evt);
        }
    }
}

このようなもの ;-)

于 2012-09-14T16:33:44.433 に答える