MVCモードとオブザーバーモード

3335 ワード

MVCモードとオブザーバーモード(Swingで):
1:MVCはコンポーネントを開発する方法であり、データの記憶処理とデータの表示を分離することができる.
MVC:M(model,被観察者):データの格納と処理を担当する.モデル内のデータが変更されると、対応するビュー(オブジェクト)に変更を通知する追加、削除、およびオブジェクトに通知する方法が含まれます.
V(view,オブザーバー):データの可視化表示を担当する.
C(Controler):入力を受信するのが一般的です.
コメント:Mは実は観察者モードにも相当します:被観察者;Vは観察者に相当する.
利点:1:これにより、複数の異なる形式のビューでデータを表示できます.2:ビューとモデルは互いに独立しています.1つを変更しても、もう1つには影響しません.
注:1:ビューとモデルの同期、すなわちデータが一致することを保証します.モデルが更新されたら、ビューの更新を通知します.
2:mvcは必ずしも分離する必要はありません.vcをクラスにマージできます.mvcを1つのクラスに統合することもできる.
mvcマージの例:
import java.util.ArrayList;

//Girl     ,      。
// Girl     ,          
public class Girl implements AbstractWatcher,AbstractSubject{
    String food = "Noodles";
    ArrayList watchers = new ArrayList<>();//     

    public Girl() {
        // TODO Auto-generated constructor stub
        this.addWatcher(this);
    }

    public void feelHungry(){
        notifyAllWatchers(this);
    }


    @Override
    public void addWatcher(AbstractWatcher watcher) {
        // TODO Auto-generated method stub
        watchers.add(watcher);
    }

    @Override
    public void removeWatcher(AbstractWatcher watcher) {
        watchers.add(watcher);
    }

    @Override
    public void notifyAllWatchers(Object obj) {
        // TODO Auto-generated method stub
        for(AbstractWatcher w : watchers)
            w.update(obj);
    }

    @Override
    public void update(Object obj) {
        // TODO Auto-generated method stub
        System.out.println("       ,      "+((Girl)obj).food);
    }

    public static void main(String[] args) {
        Girl girl = new Girl();
        girl.feelHungry();
    }
}