观察者模式
观察者模式从字面意思就能知道它主要是做什么的,所以理解起来不难,但实际实现还是有一些难度。
观察者模式是定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。
观察者模式 结构
在老师教程中学到了 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
方法。只要是注册过的观察者都会得到一个通知。
时序图
优点
观察者与被观察者之间是属于轻度的关联关系,并且是抽象耦合的,这样,对于两者来说都比较容易进行扩展
总结
观察者模式:我觉得用一个词来总结,就是群发。
当一个对象发生改变的同时,需要其他对象也改变,但是并不知道具体有多少个对象改变。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。