js设计模式中发布与订阅实现观察者模式例子

<script>
    var pubsub = {};
    (function(q) {
        var topics = {};
            subuid = -1;
        q.publish = function(topic, args) {
            if(!topics[topic]) {
                return false;
            }
            var subs = topics[topic],
                len = subs.length;
            while(len--) {
                subs[len].func(topic, args);
            }
            return this;
        }
        q.sub = function(topic, func) {
            if(!topics[topic]) {
                topics[topic] = [];
            }
            var token = ++subuid;
            topics[topic].push({
                token: token.toString(),
                func: func
            })
            return token;
        }
        q.ubsub = function(token) {
            for(var m in topics) {
                if(topics[m]){
                    for(var i=0, j=topics[m].length; i<j;i++) {
                        if(topics[m][i].token == token) {
                            topics[m].splice( i, 1 );
                            return token;
                        }
                    }
                }
            }
            return this;
        }
    })(pubsub);


</script>
<script id="test_data">
    var topic = 'test/index';
    pubsub.sub(topic, function() {alert(arguments[1])})
    pubsub.publish(topic, 2)
    pubsub.ubsub(0);
    pubsub.publish(topic, 2)
</script>

  

posted on 2013-10-22 23:30  牛-_-蜗  阅读(2102)  评论(0编辑  收藏  举报

导航