javascript中的觀察者模式實現

jiestyle21發表於2012-06-01
比如有這樣一個場景,一款遊戲玩家在等級1~10之間可以領取3000點經驗,等級11級以上可以領取2000點經驗.


我們可以用觀察者模式來實現這個需求.


這裡玩家就是一個觀察者,或者說是一個訂閱者,遊戲系統就是一個被觀察者,或者說一個傳送者


下面用程式碼來實現:

<script type="text/javascript">
// 經驗系統
var Experience = function(param) {
    this.name = param.name;
    // 經驗值
    this.expVal = param.expVal;
    this.players = [];
}
// 發放經驗
Experience.prototype.giveExp = function(player) {
    console.log("系統送給[" + player.name + "]" + this.expVal + "點經驗.");
}

// 玩家
var Player = function(param) {
    this.name = param.name;    
}

// 申請經驗模式
Player.prototype.apply = function(experience) {
    var players = experience.players;
    var isExist = false;
    for(var i=0,len=players.length;i<len;i++) {
        if(players[i] == this) {
            isExist = true;
            break;
        }
    }

    if(!isExist) {
        players.push(this);
    }

    return this;
}
// 領取經驗
Player.prototype.getExp = function(experience) {
    var players = experience.players;
    for(var i=0,len=players.length;i<len;i++) {
        if(players[i] == this) {
            experience.giveExp(this);
            break;
        }
    }

    return this;
}



// 測試

// 申明玩家
var player1 = new Player({"name":"張三"}); // 玩家1,等級4
var player2 = new Player({"name":"李四"}); // 玩家2,等級12

// 申明經驗系統
var exp2000 = new Experience({name:"2000點經驗",expVal:2000});
var exp3000 = new Experience({name:"3000點經驗",expVal:3000});

// 等級1~10能申請3000點經驗
player1.apply(exp3000);
// 等級11以上能申請2000點經驗
player2.apply(exp2000);

// 去NPC處領取經驗:
player1.getExp(exp3000);
player2.getExp(exp2000);

/*
輸出:
系統送給[張三]3000點經驗.
系統送給[李四]2000點經驗.
*/
</script>
url=http://topic.csdn.net/u/20120601/17/ee8ee2c3-8ccd-499a-9cda-35b0e8446e47.html?seed=1266795420&r=78744239#r_78744239


相關文章