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<AbstractWatcher> 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();
    }
}
  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是一个MVC框架与观察者模式的案例: 假设我们正在开发一个简单的计算器应用程序。我们可以使用MVC框架来实现该应用程序,其Model表示计算器的逻辑,View表示计算器的用户界面,Controller表示用户界面和逻辑之间的桥梁。 我们还可以使用观察者模式实现Model和View之间的通信。当Model的数据发生更改,它将通知所有已注册的观察者(即View),以便它们可以更新自己的状态。 以下是一个简单的Python代码示例,演示了如何使用MVC框架和观察者模式实现计算器应用程序: ```python # Model class Calculator: def __init__(self): self._result = 0 self._observers = [] def add(self, x, y): self._result = x + y self._notify_observers() def subtract(self, x, y): self._result = x - y self._notify_observers() def register_observer(self, observer): self._observers.append(observer) def _notify_observers(self): for observer in self._observers: observer.update(self._result) # View class CalculatorView: def __init__(self, controller): self._controller = controller self._result = 0 def update(self, result): self._result = result self._display_result() def _display_result(self): print("Result: {}".format(self._result)) def run(self): while True: operation = input("Enter operation (+ or -): ") if operation == '+': x = int(input("Enter first number: ")) y = int(input("Enter second number: ")) self._controller.add(x, y) elif operation == '-': x = int(input("Enter first number: ")) y = int(input("Enter second number: ")) self._controller.subtract(x, y) else: print("Invalid operation") # Controller class CalculatorController: def __init__(self): self._model = Calculator() self._view = CalculatorView(self) self._model.register_observer(self._view) def add(self, x, y): self._model.add(x, y) def subtract(self, x, y): self._model.subtract(x, y) def run(self): self._view.run() # Main if __name__ == '__main__': controller = CalculatorController() controller.run() ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值