• 观察者模式


    观察者模式具有以下组件

    (1) Subject 目标: 维护一系列的观察者,方便添加或者删除观察者

    (2) Observer 观察者 : 为那些在目标状态发生改变时需获取得通知的对象提供一个接口

    (3) ConcreteSubject 具体目标 : 状态发生改变时,向observer发出通知,储存ConcreteObserver的状态

    (4) ConcreteObserver 具体观察者 : 存储一个指向ConcreteSubject的引用,实现Observer的更新

        //----------- observer list
        var ObservertionList = function () {
            this.observerList = [];
        };
    
        ObservertionList.prototype.add = function (value) {
            this.observerList.push(value);
        };
    
        ObservertionList.prototype.Get = function (index) {
            //if(){   //do something
            return this.observerList[index];
            //}
        };
    
        ObservertionList.prototype.Count = function () {
            return this.observerList.length;
        };
    
    
        var extend = function (obj, extension) {
            for (var key in obj) {
                extension[key] = obj[key];
            }
        };
    
        //----------(1) subject
    
        var Subject = function () {
            this.observers = new ObservertionList();
        };
    
        Subject.prototype.addObserver = function (obj) {
            this.observers.add(obj);
        };
    
        Subject.prototype.notify = function (index) {
            //var len = this.observers.Count();
            // for(var i=0;i<len;i++){
            this.observers.Get(index).broadCast();
            // }
        };
    
        var observations = [
            {
                Id: 1,
                name: "Jackey",
                age: 24,
                skill: function () {
                    console.log("programming");
                }
            },
            {
                Id: 2,
                name: "Cassi",
                age: 23,
                skill: function () {
                    console.log("cooking");
                }
            }
        ];
    
        //(2) observer
        var broadCast = function () {
            this.broadCast = function () {
                console.log("broadCast to other");
            };
        };
    
        var subject = new Subject();
        for (var i = 0; i < observations.length; i++) {
            extend(new broadCast(), observations[i]);
            subject.addObserver(observations[i]);
            subject.notify(i);
        }
        ;
  • 相关阅读:
    Pytest框架之命令行参数2
    Pytest框架之命令行参数1
    [编程题] 二维数组中的查找
    [编程题]二叉树镜像
    补充基础:栈与队列模型
    6641. 【GDOI20205.20模拟】Sequence
    瞎讲:任意模数MTT
    瞎讲:FFT三次变二次优化
    小米oj 重拍数组求最大和
    小米oj 有多少个公差为2的等差数列
  • 原文地址:https://www.cnblogs.com/lihaozhou/p/3963420.html
Copyright © 2020-2023  润新知