博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
观察者模式
阅读量:6600 次
发布时间:2019-06-24

本文共 2472 字,大约阅读时间需要 8 分钟。

.观察者模式

.1. Vue框架实现了MVVM模式即model view  modelView, view视图层的变化都会引起modelview的变化而modelview的变化会导致view层重新渲染,其中数据观测的原理应该就是观察者模式的运用,data(被观察者)中的属性自动封装成get set 每个属性都会自动绑定当前的watcher(观察者)当前watcher成为data的依赖,,当data发生变化的时候,会通知watcher,watcher再进行试图的渲染

2.观察者模式很简单:

 

例子:电影院里面放映的电影是每个人都可以去看的,那么被观看的电影就是被观察者,而观众就是观察者,具体的电影可以添加观众,也可以删除观众(当然是假设),当电影更新了来通知观众。

当然电影不是只有一部一种类型,还有多种多样的类型,这是就抽象被观察者,而观众同样也是也要抽象出观察者

 

主要有观察者和被观察者,当然观察的对象不止一个,被观察的对象也不只一个,所以为了高可用以及可扩展性我们需要出现出抽象的观察者和抽象的被观察者四个角色

观察者

被观察者

抽象观察者

抽象被观察者

抽象被观察者可以添加、删除和通知观察者。观察者可以主动或者被动获得被观察者的信息从而改变自己

 

具体实现如下:

抽象观察者

package watchermodel; public abstract class Watcher {    //被观察者更新会通知观察者做某种操作,也可以添加参数获取被观察者通知的信息 public abstract void update()

 

抽象被观察者

package watchermodel; public interface Watched {    //添加观察者    public void addWatcher(Watcher watcher);    //删除观察者    public void removeWatcher(Watcher watcher);    //通知观察者    public void noticeWatcher();}

 

 

 

具体的观察者

package watchermodel;public class CustomA extends Watcher {    @Override    public void update() {       // TODO Auto-generated method stub       System.out.println("顾客A 被通知电影更新了");    }}

 

 

 

package watchermodel; public class CustomB extends Watcher {    @Override    public void update() {       // TODO Auto-generated method stub       System.out.println("顾客B 被通知电影更新了");    }}

 

 

具体的被观察者

package watchermodel;import java.util.ArrayList;import java.util.List;public class MovieA implements Watched {        List
watcherList=new ArrayList
(); @Override public void addWatcher(Watcher watcher) { // TODO Auto-generated method stub watcherList.add(watcher); System.out.println("增加了一个观众"); } @Override public void removeWatcher(Watcher watcher) { // TODO Auto-generated method stub watcherList.remove(watcher); System.out.println("删除了一个观众"); } @Override public void noticeWatcher() { // TODO Auto-generated method stub for(Watcher w:watcherList){ w.update(); } }}

 

 

测试:

package watchermodel; public class testWatcher {     public static void main(String[] args) {       // TODO Auto-generated method stub       CustomA customA=new CustomA();       CustomB customB=new CustomB();       MovieA movieA=new MovieA();       movieA.addWatcher(customA);       movieA.addWatcher(customB);       movieA.noticeWatcher();       movieA.removeWatcher(customA);    }}

 

使用的场景:

被观察的改变需要通知观察者,但是具体什么观察者,多少观察者不清楚

一个对象的改变需要另外多个

转载于:https://www.cnblogs.com/grows/p/7276916.html

你可能感兴趣的文章
无需认证的mail,适用于ZABBIX等运维系统
查看>>
程序员必看的十大电影
查看>>
如何在Linux系统上监测系统温度?
查看>>
【转载】【原创】生命中,要有自己的一方晴天
查看>>
Python selectors
查看>>
前端优化网站性能的14条规则
查看>>
VC2010 ADO 写入二进制数据到数据库 下载二进制数据到文件
查看>>
Win 2003 安装 IIS SNMP 无法复制 .vbs .dll 等文件 怎么办 解决办法
查看>>
2015 成长计划
查看>>
禁止用户远程登录ssh访问控制设置
查看>>
RHEL6.3配置FTP服务器(2) 本地用户下载和上传
查看>>
oracle数据库开机自启
查看>>
bash基础特性
查看>>
字符与字符串
查看>>
R语言实战(八)广义线性模型
查看>>
python模糊查找匹配 文件 文件名 并列出来
查看>>
系統用戶管理
查看>>
CCIE/CCDE笔试考试政策
查看>>
微软自学之TechNet
查看>>
11.22红帽OpenStack技术研讨会诚邀您免费参加
查看>>