Modelul de proiectare a observatorului este ca un podcast

Dacă ascultați podcast-uri, sunteți deja familiarizați cu modelul Observer. De fapt, sunteți un „observator”.

Iată definiția pentru modelul Observer:

Modelul de observare definește o dependență unu-la-mulți între obiecte, astfel încât atunci când un obiect își schimbă starea, toți dependenții săi sunt notificați și actualizați automat.

Să analizăm definiția ca legată de podcast-uri.

Am găsit un podcast interesant numit ceai pentru dezvoltator.

După ce am dat clic pe butonul SUBSCRIBE, sunt acum pe lista abonaților lor.

Când ceaiul pentru dezvoltator lansează un nou episod, aplicația mă va anunța și alți abonați. Descarcă noul episod pentru noi.

Aceasta este exact definiția modelului Observator!

Modelul de observare definește o dependență unu-la-mulți între obiecte, astfel încât atunci când un obiect își schimbă starea, toți dependenții săi sunt notificați și actualizați automat.

Există o relație unu-la-mulți între podcast-ul de ceai pentru dezvoltatori și abonați.

Atunci când ceaiul pentru dezvoltator schimbă starea, cum ar fi lansarea unui nou episod, toți abonații de ceai pentru dezvoltatori sunt notificați și actualizați.

Să o implementăm în Ruby.

Începeți cu o versiune simplă.

Clasa Podcast deține o listă de episoade și are o metodă pentru a adăuga_episode la listă.

Apoi putem crea podcast-ul developer_tea și adăuga astfel episodul # 1 astfel:

Vreau să primesc o notificare ori de câte ori este lansat un nou episod.

Ne putem actualiza după adăugarea unui nou episod la listă:

Și de câte ori primesc o actualizare de la developer_tea, pot continua și descărca cel mai recent episod.

Îmi place să ascult dezvoltatorul_tea atât de mult, încât îl recomand prietenului meu, Amber. Acum, Amber vrea să se aboneze și la ea.

Trebuie să ne asigurăm că Amber primește o notificare ori de câte ori este lansat un nou episod:

Hmmm, acest cod face ceea ce ne dorim.

Dar este o problemă.

De fiecare dată când dorim să adăugăm un abonat, trebuie să redefinim clasa.

Există o modalitate de a actualiza lista de abonați fără a fi nevoie să redefiniți clasa?

Can Putem păstra o listă de abonați!

Noua clasă Podcast păstrează o listă de abonați cu ajutorul a două metode noi: una pentru adăugarea abonaților și alta pentru eliminarea abonaților. Când un episod este lansat, actualizăm fiecare abonat.

Din păcate, Amber nu se bucură de podcast la fel de mult ca mine și decide să se dezaboneze. Folosim metoda remove_subscriber pentru a o elimina din lista abonaților.

Yay! Tocmai ai învățat modelul Observer!

Principiul de proiectare din spatele modelului de observator.

Modelul Observer utilizează principiul de design Loose Coupling:

Faceți eforturi pentru modele cuplate ușor între obiectele care interacționează.

Clasa Podcast nu știe prea multe despre abonații săi. Știe doar că fiecare abonat are o metodă de actualizare.

Acest cuplaj liber reduce la minimum dependența dintre Podcast și abonații săi. De asemenea, maximizează flexibilitatea. Atâta timp cât are o metodă de actualizare, un abonat poate fi orice: un om, un grup de oameni, un animal sau chiar o mașină.

takeaways:

  1. Modelul de observare definește o dependență unu-la-mulți între obiecte, astfel încât atunci când un obiect își schimbă starea, toți dependenții săi sunt notificați și actualizați automat.
  2. Principiul designului cuplajului Loose: străduiește-te de proiectări cuplate ușor între obiectele care interacționează.

Mulțumesc pentru citit. Există și alte exemple din viața reală a modelului Observator la care te poți gândi?

Public în săptămânalul sihui.io.

Abonați-vă, astfel încât să nu pierdeți următorul articol din serie.

Data viitoare vom vorbi despre ...