zoukankan      html  css  js  c++  java
  • jS-模式之简单的订阅者和发布者模式

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>parten</title>
    </head>
    <body>
    <script>
    var singletonTest = SingletonTest.getInstance({
        pointX : 5
    });
    console.log(singletonTest.pointX);
    
    //easy_Observer_model;
    function ObserverList(){
        this.observerList = [];
    };
    ObserverList.prototype.Add = function(obj){
        return this.observerList.push(obj);
    };
    ObserverList.prototype.Empty = function(){
        this.observerList = [];
    };
    ObserverList.prototype.Count = function(){
        return this.observerList.length;
    };
    ObserverList.prototype.Get = function(index){
        if(index>-1 && index<this.observerList.length)
        return this.observerList[index];
    };
    ObserverList.prototype.Insert = function(obj,index){
        var pointer = -1;
        if(index == 0){
            this.observerList.unshift(obj);
            pointer = index;
        }else if(index == this.observerList.length){
            this.observerList.push(obj);
            pointer = index;
        };
        return pointer;
    };
    ObserverList.prototype.IndexOf = function(obj,startIndex){
        var i = startIndex, pointer = -1;
        while(i < this.observerList.length){
            if(this.observerList[i] === obj){
                pointer = i;
            };
            i++
        };
        return pointer;
    };
    ObserverList.prototype.RemoveIndexAt = function(index){
        if(index === 0){
            this.observerList.shift();
        }else if(index === this.observerList.length-1){
            this.observerList.pop();
        };
        return index;
    };
    
    function extend(obj,extension){
        for(var key in obj){
            extension[key] = obj[key];
        }
    };
    
    //
    function Subject(){ this.observers = new ObserverList(); }; Subject.prototype.AddObserver = function(obj){ this.observers.add(obj) }; Subject.prototype.RemoveObserver = function(observer){ this.observers.removeIndexAt( this.observers.IndexOf(observer,0) ); }; Subject.prototype.Notify = function(context){ var observerCount = this.observers.count(); for(var i=0; i<observerCount; i++){ this.observers.Get(i).update(context); }; }
    //Pubsub//subscribe
    var Pubsub = {}; (function(q){ var topics = [], subUid = -1; q.publish = function(topic,args){ if(!topics[topic]){ return false; }; var subscribers = topics[topic], len = subscribers ? subscribers.length : 0; while(len--){ subscribers[len].func(topic,args); } return this; }; q.subscribe = function(topic,func){ if(!topics[topic]){ topics[topic] = []; }; var token = (++subUid).toString(); topics[topic].push({ token : token, func : func }); return token; }; q.unsubscribe = function(token){ for(var m in topics){ if(topics[m]){ for(var i=0; i<topics[m].length; i++){ if(topics[m][i].token === token){ topics[m].splice(i,1); return token; } } }; }; return this; } })(pubsub); </script> </body> </html>
  • 相关阅读:
    SPOJ 694 (后缀数组) Distinct Substrings
    POJ 2774 (后缀数组 最长公共字串) Long Long Message
    POJ 3693 (后缀数组) Maximum repetition substring
    POJ 3261 (后缀数组 二分) Milk Patterns
    UVa 1149 (贪心) Bin Packing
    UVa 12206 (字符串哈希) Stammering Aliens
    UVa 11210 (DFS) Chinese Mahjong
    UVa (BFS) The Monocycle
    UVa 11624 (BFS) Fire!
    HDU 3032 (Nim博弈变形) Nim or not Nim?
  • 原文地址:https://www.cnblogs.com/diligenceday/p/3428586.html
Copyright © 2011-2022 走看看