Nó cung cấp triển khai một số phổ biến messaging patterns, bao gồm Event Aggregator Pattern, Command Pattern và Observer Pattern.
Các mẫu này tạo thuận lợi cho việc tách các triển khai nhằm giảm phụ thuộc đối tượng. Hãy xem xét một trò chơi phong cách "Combat" đơn giản bao gồm một chiếc xe tăng và một số mục tiêu. Nếu không có mẫu tin nhắn, bể cần phải có kiến thức rõ ràng về mục tiêu và cách họ làm việc, và trong thực tế không thể tồn tại mà không có sự target
định nghĩa:
var Tank = function(targets) { this.targets = targets };
Tank.prototype.fire = function() {
var self = this,
HpLoss = -500;
_.each(this.targets, function(target) {
if (self.isNear(target.coordinates) && target.canWithstand(HpLoss)) {
target.die();
}
}
var target1 = new Target(coordinatesA, armorA);
var target2 = new Target(coordinatesB, armorB);
var tank = new Tank([target1, target2]);
Sử dụng các mẫu tin nhắn như Observer, tank
trong đoạn code trên doesn' t cần kiến thức về các mục tiêu của nó; đúng hơn, các mục tiêu có thể xác định cho mình cho dù họ nên chết:
var Target = function() {}
Target.prototype.calculateDamage = function(coordinates, damage) {
if (this.isNear(coordinates) && !this.canWithstand(damage)) {
this.die();
}
}
var Tank = function() {};
Tank.prototype.fire = function() {
this.trigger('fire', { damage: 400, coordinates: this.location });
};
// Now Tank is entirely self-contained, and some external mediator can
// make things happen at will:
function main() {
var target1 = new Target(coordinatesA, armorA);
var target2 = new Target(coordinatesB, armorB);
var tank = new Tank();
target1.listenTo(tank, 'fire', target1.calculateDamage, target1);
target2.listenTo(tank, 'fire', target2.calculateDamage, target2);
tank.fire();
var target3 = new Target3(coordinatesB, armorB);
target3.listenTo(tank, 'fire', target3.calculateDamage, target3);
}
Nguồn
2013-09-29 04:16:54
Cảm ơn, Chỉ cần những gì tôi đang tìm kiếm! Điểm # 1, vì vậy nếu không có trình xử lý nào xuất hiện thì sẽ không có lỗi nào được ném khi lệnh.execute ("lỗ đen") được kích hoạt? –
@toxinhead đúng vậy! – Creynders