MVC模式和观察者模式

MVC模式与观察者模式(在Swing中):

1:MVC是一种开发组件的方法,可以将数据的存储处理和数据的表示分离

MVC:
M(model,被观察者):负责存储处理数据。包含增加,删除和通知观察者的方法,当模型中的数据改变时,通知相应视图(观察者)做出改变。

V(view,观察者):负责数据的可视化表示。

C(Controler):一般负责接收输入。

评:M其实也相当于观察者模式中的:被观察者; V相当于观察者.

优势:
1:这样可以用多个不同形式的视图来显示一份数据。
2:视图和模型见相互独立。修改一个并不影响另一个。

注意:
1 : 要保证视图和模型之间的同步,即数据要一致。模型更新后,要通知视图更新。

2 : mvc不一定要分开,可以将vc合并到一个类中。也可以将mvc合并到一个类中.

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();
    }
}

你可能感兴趣的:(MVC模式和观察者模式)