观察者模式

观察者模式从字面意思就能知道它主要是做什么的,所以理解起来不难,但实际实现还是有一些难度。

观察者模式是定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。

观察者模式 结构

在老师教程中学到了 Angularjs 中的观察者模式,在Google上具体了解一下

观察者模式包含四个角色:

Subject: 目标
把所有对观察者对象的引用保存在一个聚集(比如ArrayList对象)里ConcreteSubject: 具体目标
将有关状态存入具体观察者对象Observer: 观察者
为所有的ConcreteObserver定义一个接口,在得到`Subject`的通知时更新自己ConcreteObserver: 具体观察者
实现抽象观察者定义的更新接口,以便在得到主题更改通知时更新自身的状态

Google都是对Java观察者模式的解释,Angularjs的观察者模式应该与之大同小异

实现过程

不使用观察者模式,登录时不实时获取当前登录用户,必须刷新界面

使用观察者模式

代码

Services:

        // 观察者self.observerCallbacks = [];// 注册观察者self.reisterObserverCallback = function(callback){self.observerCallbacks.push(callback);};// 通知观察者self.notifyObserver = function(currentLoginTeacher){angular.forEach(self.observerCallbacks, function(callback){callback(currentLoginTeacher);});};

Controller:

                    // 注册观察者teacher.reisterObserverCallback(function(teacher){$scope.data.CurrentLoginTeacher = teacher;});

使用时调用self.notifyObserver方法。只要是注册过的观察者都会得到一个通知。

时序图

优点

观察者与被观察者之间是属于轻度的关联关系,并且是抽象耦合的,这样,对于两者来说都比较容易进行扩展

总结

观察者模式:我觉得用一个词来总结,就是群发
当一个对象发生改变的同时,需要其他对象也改变,但是并不知道具体有多少个对象改变。

Angularjs 观察者模式 理解相关推荐

  1. AngularJS 深入理解 $scope 转载▼

    AngularJS 深入理解 $scope 转载▼ (2015-04-07 14:09:50) $scope 的使用贯穿整个 AngularJS App 应用,它与数据模型相关联,同时也是表达式执行的 ...

  2. AngularJs的理解

    随着时代的不断进步,各种各样的开发理念与开发框架不断的提出与发展,目前来说,除了游戏,QQ,office这类软件之外,新出的一些软件应用开始出现两个方向,一个是以web为主的webApp,一个是以移动 ...

  3. JavaScript --- [学习笔记]观察者模式 理解对象 工厂模式 构造函数模式

    说明 本系列(JS基础梳理)为后面TCP的模拟实现做准备 本篇的主要内容: 观察者模式.工厂模式.构造函数模式 和 对对象的理解 1. 观察者模式 参考JavaScript设计模式 1.1 消息注册方 ...

  4. PHP 观察者模式 理解

    用模式开发的优点是,能让我们的逻辑结构以及代码更加清晰,便于维护! 而我们为什么要用 "观察者模式"?这就需要从实际运用中来理解才能更好的运用!用如下的情境来说明吧. 事例,开始时 ...

  5. Java观察者模式理解和实现

    今天本想一本正经的把RxJava看一看,想着前段时间RxJava都已经到了第二版,而自己RxJava的认识还只是很基础,甚至连基础都算不上,所以本着以后能在项目里优雅地把他用出来的想法,我开始了RxJ ...

  6. angularJS概念理解三:控制器

    在AngularJS中,实现数据绑定的核心是scope对象. 控制器让我们有机会在scope上定义我们的业务逻辑,具体说,可以使用控制器: 对scope对象进行初始化 向scope对象添加方法 在模板 ...

  7. Laravel orm 观察者模式理解observe

    在开发中我们经常需要新增,修改...等模型操作 操作完成后需要触发个事件 以前一般的做法 <?php//例子1 $row = User::InsertGetId(['name'=>''张三 ...

  8. 视频教程-AngularJS基础入门视频课程-AngularJS

    AngularJS基础入门视频课程 南京大学软件工程硕士,全栈开发工程师,全栈讲师. 曾就职于中软国际.擎天科技.华为等公司,擅长Java开发.Web前端.Python爬虫.PHP等领域技术.从事软件 ...

  9. JavaScript --- [学习笔记] 原型模式

    说明 接JavaScript - > [学习笔记]观察者模式 & 理解对象 & 工厂模式 & 构造函数模式 上一篇构造函数模式创建的实例,不同实例的同一个方法是不相等的, ...

最新文章

  1. Hibernate 的getHibernateTemplate()方法使用
  2. 删除文件中指定的一行
  3. CALL TRANSACTION
  4. php在sql中添加数据,使用php在oracle数据库中插入数据
  5. java cpu监控,java系统监控CPU 磁盘
  6. win32/mfc/qt 异常处理与总结
  7. php $conf,$conf
  8. 洛谷 P1372 又是毕业季I
  9. 正则表达式中原子的5种类型
  10. stm32f072 necleo学习(一)
  11. VirtualLab Fusion光学仿真软件使用笔记
  12. 移动硬盘显示拒绝访问文件怎样找到
  13. 微信开发者工具提示 “当前系统代理不是安全代理,是否信任?”
  14. c#推箱子小游戏代码_C# 简单推箱子游戏源码
  15. 搜狐公司董事局主席兼首席执行官——张朝阳名言4
  16. 2019:自我觉醒的一年
  17. bmob php,Bmob 简单API使用(一)
  18. springcloud引言
  19. nginx同一个地址端口代理多个页面
  20. 【翻译】A Survey on Generative Diffusion Model(生成扩散模型的综述研究)

热门文章

  1. 使用idea创建项目的步骤
  2. linux监听端口无响应,linux – tomcat运行,但是8080端口没有响应
  3. 【NLP】毕设学习笔记(二)transformer
  4. 22_python基础—异常
  5. MYSQL导出数据报错ERROR 1290 (HY000) 和 ERROR 1 (HY000)
  6. 计算机辅助普通话测试试题及答案,普通话测试试题及答案
  7. 为你的应用程序添加动态Java代码
  8. 数学之美:欣赏超越数e
  9. 《天天数学》连载05:一月五日
  10. 2019 ACM/ICPC 南昌站 G,拉格朗日插值