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 mediatortasarı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 observertasarım modelini seçeceksiniz.
- Her ambulans
observernesnesi 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 observersve 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 observabletek yönlü iletişime sahip olduğu (ambulansa observersü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 observersyalnızca operatör observableolaylarına kaydolur .
- Her kişi nesnesinin sohbete bir referansı vardır
mediatorve ayrıca sohbet mediator, kişilerin her birine atıfta bulunur. Ambulansın observeroperatöre atıfta bulunmadığı durumlarda observable, yalnızca operatör observableher ambulansı referans alır observer.
Programmers.StackExchangereddedildi, ancak yanıtla ilgilendiğim için orada benzer bir gönderi yaptım. Bazı cevapları ilginç bulabilirsin. :)