1

观察者模式

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

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

观察者模式 结构

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

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

Subject: 目标
把所有对观察者对象的引用保存在一个聚集(比如ArrayList对象)里

ConcreteSubject: 具体目标
将有关状态存入具体观察者对象

Observer: 观察者
为所有的ConcreteObserver定义一个接口,在得到`Subject`的通知时更新自己

ConcreteObserver: 具体观察者
实现抽象观察者定义的更新接口,以便在得到主题更改通知时更新自身的状态

clipboard.png

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

实现过程

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

使用观察者模式
clipboard.png

代码

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方法。只要是注册过的观察者都会得到一个通知。

时序图

clipboard.png

优点

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

总结

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

潘佳琦
894 声望34 粉丝

为 API 生,为框架死,为 debug 奋斗一辈子;


下一篇 »
QT

引用和评论

0 条评论