Vaatleja kujundusmuster on omamoodi nagu taskuhääling

Taskuhäälingusaadete kuulamisel olete vaatleja mustriga juba tuttav. Tegelikult olete "vaatleja".

Vaatleja mustri määratlus on järgmine:

Vaatleja muster määratleb objektide vahelise sõltuvuse üks mitmest nii, et kui ühe objekti olek muutub, teavitatakse ja uuendatakse automaatselt kõiki tema ülalpeetavaid.

Vaatame seda määratlust, mis on seotud taskuhäälingusaadetega.

Leidsin huvitava taskuhäälingusaate nimega arendaja tee.

Pärast nupule SUBSCRIBE klõpsamist olen nüüd nende abonentide nimekirjas.

Kui arendaja tee ilmub uus osa, teavitab rakendus mind ja teisi tellijaid. See laadib meie jaoks alla uue episoodi.

See on täpselt vaatleja mustri määratlus!

Vaatleja muster määratleb objektidevahelise sõltuvuse ühest mitmeks, nii et kui üks objekt muudab olekut, teavitatakse ja uuendatakse automaatselt kõiki tema ülalpeetavaid.

Arendaja tee podcasti ja tellijate vahel on suhe üks-ühele.

Kui arendaja tee muudab olekut, näiteks vabastab uue osa, teavitatakse ja uuendatakse kõiki arendaja tee tellijaid.

Rakendame selle Ruby'is.

Alustage lihtsa versiooniga.

Podcasti klass sisaldab episoodide loendit ja sellel on meetod nimekirja lisamiseks_episood.

Siis saame luua arendaja_tea taskuhäälingusaate ja lisada sellele 1. jao:

Soovin saada teatist iga uue osa ilmumise kohta.

Pärast uue episoodi lisamist loendisse saate mind värskendada:

Ja alati, kui saan värskendust saidilt developer_tea, võin minna alla ja laadida alla uusim osa.

Mulle meeldib arendaja_tea kuulamine nii palju, et soovitan seda oma sõbrale Amberile. Nüüd soovib Amber seda ka tellida.

Peame tagama, et Amber saab ka teatise iga uue osa ilmumise kohta:

Hmmm, see kood teeb seda, mida me tahame.

Kuid probleem on olemas.

Iga kord, kui soovime tellijat lisada, peame klassi uuesti määratlema.

Kas on võimalik abonentide loendit värskendada ilma, et peaksite klassi uuesti määratlema?

Võime pidada abonentide nimekirja!

Uus Podcasti klass peab abonentide loendit kahe uue meetodi abil: üks abonentide lisamiseks ja teine ​​abonentide eemaldamiseks. Jao vabastamisel värskendame iga tellijat.

Kahjuks ei naudi Amber podcasti nii palju kui mina ja otsustab tellimuse tühistada. Tema abonentide loendist eemaldamiseks kasutame meetodit remove_subscriber.

Jah! Õppisite just vaatleja mustrit!

Vaatleja mustri kujunduspõhimõte.

Vaatleja muster kasutab lahtise haakeseadise kujunduspõhimõtet:

Püüdke omavahel suhelda võivate objektide vahel lõdvalt ühendatud kujunduste poole.

Podcasti klass ei tea oma tellijate kohta kuigi palju. See teab ainult seda, et igal abonendil on värskendusmeetod.

See lahtine sidumine vähendab sõltuvust Podcasti ja selle abonentide vahel. See maksimeerib ka paindlikkust. Kuni värskendusmeetodil on tellijaks ükskõik mida: inimene, inimrühm, loom või isegi auto.

Eemaldatavad:

  1. Vaatleja muster määratleb objektidevahelise sõltuvuse ühest mitmeks, nii et kui üks objekt muudab olekut, teavitatakse ja uuendatakse automaatselt kõiki tema ülalpeetavaid.
  2. Lahtise haakeseadise kujunduspõhimõte: püüdke omavahel tihedalt seotud disainilahenduste vahel.

Täname, et lugesite Kas vaatleja mustrist on ka muid päriselu näiteid, millele võite mõelda?

Avaldan nädalas sihui.io.

Tellige, nii et te ei jätaks ilma sarja järgmisest artiklist.

Järgmine kord räägime ...