Stebėtojo dizainas yra tarsi podcast'as

Jei klausote transliacijų, jūs jau esate susipažinęs su „Observer“ modeliu. Tiesą sakant, jūs esate „stebėtojas“.

Štai stebėtojo modelio apibrėžimas:

Stebėtojo modelis nusako priklausomybę nuo vieno iki daugelio objektų, kad, pasikeitus vienam objektui, visi jo priklausomi asmenys būtų informuojami ir atnaujinami automatiškai.

Pažvelkime į apibrėžimą, susijusį su internetinėmis transliacijomis.

Radau įdomią podcast'ą, pavadintą kūrėjo arbata.

Spustelėjus mygtuką PASAKYTI, dabar esu jų abonentų sąraše.

Kai kūrėjo arbata išleis naują seriją, programa praneš apie tai man ir kitiems prenumeratoriams. Tai atsisiųs mums naują seriją.

Tai tiksliai yra stebėtojo modelio apibrėžimas!

Stebėtojo modelis nusako priklausomybę nuo vieno iki daugelio objektų, kad, pasikeitus vienam objektui, visi jo priklausomi asmenys būtų informuojami ir atnaujinami automatiškai.

Tarp kūrėjo arbatos podcast'o ir prenumeratorių yra santykis vienas su vienu.

Kai kūrėjo arbata keičia būseną, pvz., Išleidžia naują epizodą, visi kūrėjo arbatos abonentai informuojami ir atnaujinami.

Įdiegkime tai „Ruby“.

Pradėkite nuo paprastos versijos.

„Podcast“ klasėje yra epizodų sąrašas ir yra būdas pridėti epizodą prie sąrašo.

Tada mes galime sukurti „developer_tea“ transliaciją ir pridėti prie jos 1 seriją taip:

Noriu gauti pranešimą, kai bus išleistas naujas epizodas.

Pridėję naują epizodą į sąrašą, galime mane atnaujinti:

Kiekvieną kartą, kai gaunu naujinį iš „developer_tea“, galiu eiti į priekį ir atsisiųsti naujausią seriją.

Man labai patinka klausytis „developer_tea“, kad rekomenduoju tai savo draugui Gintarui. Dabar „Gintarė“ taip pat nori ją užsiprenumeruoti.

Turime įsitikinti, kad „Amber“ taip pat gauna pranešimą, kai išleidžiamas naujas epizodas:

Hmmm, šis kodas daro tai, ko mes norime.

Bet yra problema.

Kiekvieną kartą, kai norime pridėti abonentą, turime iš naujo apibrėžti klasę.

Ar yra būdas atnaujinti abonentų sąrašą nereikia iš naujo apibrėžti klasės?

Galime tvarkyti abonentų sąrašą!

Naujoji „Podcast“ klasė tvarko abonentų sąrašą dviem naujais būdais: vienas abonentų įtraukimui, kitas abonentų pašalinimui. Kai serija išleidžiama, mes atnaujiname kiekvieną abonentą.

Deja, Gintarui nepatinka podcast'as tiek, kiek aš, ir nusprendžiu atsisakyti prenumeratos. Norėdami pašalinti ją iš abonentų sąrašo, naudojame „remove_subscriber“ metodą.

AyGerai! Jūs ką tik išmokote stebėtojo modelį!

Stebėtojo modelio projektavimo principas.

Stebėtojo modelyje naudojamas „Loose Coupling“ projektavimo principas:

Siekite, kad tarpusavyje sąveikaujantys objektai būtų lengvai sujungti.

„Podcast“ klasė mažai žino apie savo abonentus. Tai tik žino, kad kiekvienas abonentas turi atnaujinimo metodą.

Ši laisva jungtis sumažina Podcast'o ir jo abonentų priklausomybę. Tai taip pat padidina lankstumą. Jei jis turi atnaujinimo metodą, abonentu gali būti bet kas: žmogus, žmonių grupė, gyvūnas ar net automobilis.

Įeinantys:

  1. Stebėtojo modelis nusako priklausomybę nuo vieno iki daugelio objektų, kad, pasikeitus vienam objektui, visi jo priklausomi asmenys būtų informuojami ir atnaujinami automatiškai.
  2. „Loose Coupling“ dizaino principas: siekite, kad tarpusavyje sąveikaujantys objektai būtų laisvai sujungti.

Ačiū, kad perskaitėte. Ar yra kitų stebėtojo modelio realiame gyvenime pavyzdžių, kuriuos galite įsivaizduoti?

Kiekvieną savaitę skelbiu sihui.io.

Prenumeruokite, kad nepraleistumėte kito straipsnio iš serijos.

Kitą kartą mes kalbėsime apie…