A Observer Design mintája olyan, mint egy podcast

Ha podcastot hallgat, akkor már ismeri a Observer mintát. Valójában „megfigyelő” vagy.

Íme a Megfigyelő minta meghatározása:

A Megfigyelő mintája meghatározza az objektumok közötti függőséget egy-től sokhoz, úgy hogy amikor egy objektum megváltoztatja az állapotot, az összes hozzátartozóját automatikusan értesíti és frissíti.

Nézzük meg a Podcast-okkal kapcsolatos meghatározást.

Találtam egy érdekes podcast nevű fejlesztői teát.

Miután rákattintottam a FELIRATKOZÁS gombra, most felkerülök az előfizetők listájára.

Amikor a fejlesztõ tea kiad egy új epizódot, az alkalmazás értesíti nekem és más feliratkozóknak. Tölti le az új epizódot számunkra.

Pontosan ez a Megfigyelő minta meghatározása!

A Megfigyelő mintája meghatározza az objektumok közötti függőséget egy-egytől-egyig úgy, hogy amikor egy objektum megváltoztatja az állapotot, az összes hozzátartozóját automatikusan értesíti és frissíti.

A tea-podcast fejlesztője és az előfizetők között egy-egy kapcsolat van.

Amikor a fejlesztői tea megváltoztatja az állapotot, például egy új epizód kiadását, a fejlesztői tea összes előfizetőjét értesítjük és frissítjük.

Végezzük el Ruby-ban.

Kezdje egy egyszerű verzióval.

A Podcast osztály az epizódok listáját tartja, és rendelkezik egy módszerrel, hogy add_episode a listához.

Ezután létrehozhatjuk a developer_tea podcastot, és így hozzáadhatjuk az 1. epizódot:

Értesítést szeretnék kapni, amikor egy új epizód megjelenik.

Miután frissítettünk egy új epizódot a listára, frissíthetünk:

És amikor frissítést kapok a developer_tea-tól, továbbmehetek és letölthetem a legújabb epizódot.

Annyira szeretek hallgatni a developer_tea-t, hogy azt ajánlom Amber-barátomnak. Most Amber előfizetni akar rá.

Gondoskodnunk kell arról, hogy Amber értesítést kapjon egy új epizód kiadásakor is:

Hmmm, ez a kód azt csinálja, amit akarunk.

De van egy probléma.

Minden alkalommal, amikor előfizetőt akarunk felvenni, újra kell határoznunk az osztályt.

Van mód az előfizetők listájának frissítésére az osztály újradefiniálása nélkül?

Megtarthatunk előfizetői listát!

Az új Podcast osztály előfizetői listát tart két új módszer segítségével: az egyik előfizetők felvételére, a másik az előfizetők eltávolítására. Amikor egy epizód megjelenik, minden előfizetőt frissítünk.

Sajnos Amber nem élvezi annyira a podcastot, mint én, és úgy dönt, hogy leiratkozik. Az remove_subscriber módszerrel távolítjuk el az előfizetők listájáról.

Yay! Most megtanultad a Megfigyelő mintáját!

A megfigyelő minta mögött meghúzódó alapelvek.

A Observer minta a Laza tengelykapcsoló tervezési elvét használja:

Törekedjen a lazán összekapcsolt mintákra az egymással kölcsönhatásba lépő objektumok között.

A Podcast osztály nem sokat tud az előfizetőiről. Csak azt tudja, hogy minden előfizető rendelkezik-e frissítési módszerrel.

Ez a laza csatlakozás minimalizálja a Podcast és az előfizetői közötti függőséget. Ezenkívül maximalizálja a rugalmasságot. Amíg van frissítési módszer, az előfizető bármi lehet: ember, embercsoport, állat vagy akár autó.

Útravaló:

  1. A Megfigyelő mintája meghatározza az objektumok közötti függőséget egy-től sokhoz, úgy hogy amikor egy objektum megváltoztatja az állapotot, az összes hozzátartozóját automatikusan értesíti és frissíti.
  2. Laza tengelykapcsoló tervezési elve: törekedjenek lazán csatolt tervekre a tárgyak között, amelyek kölcsönhatásba lépnek.

Köszönöm, hogy elolvasta. Van-e olyan egyéb valós példák a megfigyelő mintájáról, amelyekre gondolhat?

Hetente teszem közzé a sihui.io webhelyen.

Feliratkozás, így nem fog hiányozni a sorozat következő cikke.

Legközelebb erről beszélünk ...