Zapewnia implementacje kilku popularnych messaging patterns, w tym Event Aggregator Pattern,i Observer Pattern.
Te wzorce ułatwiają oddzielenie implementacji w celu zmniejszenia zależności obiektów. Rozważmy prostą grę typu "Combat" składającą się z czołgu i kilku celów. Bez wzorów wiadomości, zbiornik musi mieć wyraźny wiedzy na temat celów i jak one działają, i w rzeczywistości nie może istnieć bez definicji target
:
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]);
Korzystanie z wzorców, takich jak wiadomości obserwatora tank
w powyższym kodzie nie robi” • potrzebuje wiedzy o swoich celach; raczej cele można określić dla siebie, czy powinni umrzeć
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);
}
Dzięki, właśnie tego szukałem! Punkt # 1, więc jeśli żaden program obsługi nie jest obecny, żadne błędy nie zostaną wygenerowane po uruchomieniu polecenia.execute ("blackhole")? –
@toxinhead that's right! – Creynders