2

私はこの状況にあります:

オブザーバブルであるオブジェクトとオブザーバーである別のオブジェクト。

update(Observable obs,Object obj)オブザーバーには、変更されたオブジェクトを介して受信するメソッドがnotifyObserversあります。オブザーバーが通知を受信すると、updateメソッドは変更されたオブジェクトを出力します。MVCパターンを実装するGUIで結果を出力したいのですが、このガイドのMVCパターンに従っています。私の考えはControllerオブザーバーを作ることです。そんな感じ:

public class Controller extends AbstractController implements Observer 
{
    public static final String TOTAL_HIT_COUNT_PROPERTY = "Total Hit";

    public void changeTotalHitCount(long new_total_hit_count)
    {
        setModelProperty(TOTAL_HIT_COUNT_PROPERTY, new_total_hit_count);
    }

    @Override
    public void update(Observable o, Object arg) 
    {

    }
}

しかし、それが正しい実装であるかどうかはわかりません!

4

3 に答える 3

7

オブザーバーパターンMVCパターンは2つの異なるデザインパターンです。同じページにいることを確認するためです。

MVC(少なくとも定義上)パターンでは、モデルが変更されるとビューが自動的に更新されると思われます。これがあなたがやろうとしていることだと思います。その場合、つまり、オブザーバーはコントローラーではなくビューであり、モデルはObservableオブジェクトになります。

したがって:

Observable changes --> update Observer

純粋なMVCパターンで取得しようとしているものを複製します。

Model changes --> update View

これが物事を行う方法であると言っているわけではありませんが、JavaのObserver / ObservableをMVCパターンに適用しようとすると、これはうまくいく可能性があると思います。

于 2012-07-09T20:18:58.167 に答える
5

オブザーバーパターンはMVCの一部です。これはMVCの不可欠な部分です。

オブザーバーパターンは、おなじみのモデル-ビュー-コントローラー(MVC)アーキテクチャパターンの重要な部分でもあります。ソース:https ://en.wikipedia.org/wiki/Observer_pattern

MVCパターンは、オブザーバー、コンポジット、ストラテジーパターンの3つのデザインパターンの組み合わせと見なすことができます。これは、オブザーバーとMVC互換性があることを意味します。

于 2015-07-27T05:55:45.150 に答える
0

「デザインパターン-再利用可能なデザインの要素」(悪名高い4人のギャングによる)のセクション1.2(SmallTalk MVCのデザインパターン)では、MVCがオブザーバーパターンをどのように使用するかについて、いくつかの場所で言及しています。

この例は、額面どおりに、ビューをモデルから切り離す設計を反映しています。ただし、この設計は、より一般的な問題に適用できます。オブジェクトを分離して、あるオブジェクトへの変更が他のオブジェクトの詳細を知る必要なしに、他のオブジェクトに影響を与えることができるようにします。このより一般的なデザインは、オブザーバーデザインパターンによって記述されます

そして後で同じセクションで

ただし、MVCの主な関係は、オブザーバー、コンポジット、およびストラテジーのデザインパターンによって与えられます。

于 2021-07-28T14:57:32.410 に答える