Bir örnek verelim: iki uygulama oluşturmak istediğinizi düşünün:
- Sohbet uygulaması.
- Acil ambulans operatörü uygulaması.
arabulucu
Sohbet uygulamasını oluştururken mediator
tasarım modelini seçeceksiniz.
- Kişiler herhangi bir zamanda sohbete katılabilir veya sohbete ayrılabilir, bu nedenle sohbet eden iki kişi arasında doğrudan referans tutmak mantıklı değildir.
- Hala iki kişi arasındaki iletişimi kolaylaştırmalı ve sohbet etmelerine izin vermeliyiz.
Neden tercih edeceğiz mediator
? sadece tanımına bir göz atın:
Arabulucu model ile, nesneler arasındaki iletişim bir aracı nesnesi içinde kapsüllenir. Nesneler artık birbirleriyle doğrudan iletişim kurmuyor, bunun yerine arabulucu aracılığıyla iletişim kuruyor. Bu, iletişim kuran nesneler arasındaki bağımlılıkları azaltır ve böylece eşleşmeyi azaltır.
Sihir nasıl çalışır? Öncelikle sohbet aracısını oluşturacağız ve kişilerin nesnelerini ona kaydettireceğiz, böylece her bir kişiyle iki yönlü bağlantı kuracak (kişi sohbet aracısını kullanarak mesaj gönderebilir, çünkü ona erişebilir ve sohbet aracısı erişebilir. kişi nesnesinin alınan yöntemi, ona da erişimi vardır)
function Person(name) {
let self = this;
this._name = name;
this._chat = null;
this._receive(from, message) {
console.log("{0}: '{1}'".format(from.name(), message));
}
this._send(to, message) {
this._chat.message(this, to, message);
}
return {
receive: (from, message) => { self._receive(from, message) },
send: (to, message) => { self._send(to, message) },
initChat: (chat) => { this._chat = chat; },
name: () => { return this._name; }
}
}
function ChatMediator() {
let self = this;
this._persons = [];
return {
message: function (from, to, message) {
if (self._persons.indexOf(to) > -1) {
self._persons[to].receive(from, message);
}
},
register: function (person) {
person.initChat(self);
self._persons.push(person);
}
unRegister: function (person) {
person.initChat(null);
delete self._persons[person.name()];
}
}
};
//Usage:
let chat = new ChatMediator();
let colton = new Person('Colton');
let ronan = new Person('Ronan');
chat.register(colton);
chat.register(ronan);
colton.send(colton, 'Hello there, nice to meet you');
ronan.send(ronan, 'Nice to meet you to');
colton.send(colton, 'Goodbye!');
chat.unRegister(colton);
gözlemci
911 çağrı uygulamasını oluştururken observer
tasarım modelini seçeceksiniz.
- Her ambulans
observer
nesnesi acil bir durum olduğunda haberdar edilmek ister, böylece adresi sürdürebilir ve yardım edebilir.
- Acil durum operatörü
observable
, ambulansın her birine atıfta bulunur observers
ve yardıma ihtiyaç duyulduğunda (veya olay oluşturduğunda) onları bilgilendirir.
Neden tercih edeceğiz observer
? sadece tanımına bir göz atın:
Özne adı verilen bir nesne, bağımlılarının bir listesini tutar, gözlemci olarak adlandırılır ve genellikle yöntemlerinden birini çağırarak herhangi bir durum değişikliğinden onları otomatik olarak bilgilendirir.
function AmbulanceObserver(name) {
let self = this;
this._name = name;
this._send(address) {
console.log(this._name + ' has been sent to the address: ' + address);
}
return {
send: (address) => { self._send(address) },
name: () => { return this._name; }
}
}
function OperatorObservable() {
let self = this;
this._ambulances = [];
return {
send: function (ambulance, address) {
if (self._ambulances.indexOf(ambulance) > -1) {
self._ambulances[ambulance].send(address);
}
},
register: function (ambulance) {
self._ambulances.push(ambulance);
}
unRegister: function (ambulance) {
delete self._ambulances[ambulance.name()];
}
}
};
//Usage:
let operator = new OperatorObservable();
let amb111 = new AmbulanceObserver('111');
let amb112 = new AmbulanceObserver('112');
operator.register(amb111);
operator.register(amb112);
operator.send(amb111, '27010 La Sierra Lane Austin, MN 000');
operator.unRegister(amb111);
operator.send(amb112, '97011 La Sierra Lane Austin, BN 111');
operator.unRegister(amb112);
Farklılıklar:
- Sohbet
mediator
, operatörün observable
tek yönlü iletişime sahip olduğu (ambulansa observer
sürmesini ve bitirmesini söyler ) kişiler nesneleri arasında iki yönlü iletişime sahiptir (gönderme ve alma ).
- Sohbet
mediator
, kişilerin nesnelerinin aralarında etkileşime girmesini sağlayabilir (doğrudan bir iletişim olmasa bile), ambulanslar observers
yalnızca operatör observable
olaylarına kaydolur .
- Her kişi nesnesinin sohbete bir referansı vardır
mediator
ve ayrıca sohbet mediator
, kişilerin her birine atıfta bulunur. Ambulansın observer
operatöre atıfta bulunmadığı durumlarda observable
, yalnızca operatör observable
her ambulansı referans alır observer
.
Programmers.StackExchange
reddedildi, ancak yanıtla ilgilendiğim için orada benzer bir gönderi yaptım. Bazı cevapları ilginç bulabilirsin. :)