Observer Design Pattern er på samme måde som en podcast

Hvis du lytter til podcasts, er du allerede bekendt med Observer-mønsteret. Faktisk er du en "observatør".

Her er definitionen på observatørmønsteret:

Observatormønsteret definerer en afhængighed mellem mange objekter, så når et objekt ændrer tilstand, bliver alle dets afhængige underrettet og opdateres automatisk.

Lad os se på definitionen som relateret til podcasts.

Jeg fandt en interessant podcast ved navn Developer tea.

Efter at have klikket på SUBSCRIBE-knappen, er jeg nu på deres abonnentliste.

Når udvikler te frigiver en ny episode, vil appen give mig og andre abonnenter besked. Den henter den nye episode til os.

Det er nøjagtigt definitionen af ​​Observer-mønsteret!

Observatormønsteret definerer en afhængighed mellem mange objekter, så når et objekt ændrer tilstand, bliver alle dets afhængige underrettet og opdateres automatisk.

Der er et en-til-mange-forhold mellem udvikler-te-podcast og abonnenter.

Når udviklerte skifter tilstand, f.eks. Frigivelse af en ny episode, underrettes og opdateres alle abonnenter på udviklerte.

Lad os implementere det i Ruby.

Start med en simpel version.

Podcast-klassen indeholder en liste over episoder og har en metode til at tilføje_episode til listen.

Så kan vi oprette udvikler_tea-podcasten og tilføje afsnit 1 til den sådan:

Jeg vil gerne modtage en anmeldelse, hver gang en ny episode frigives.

Vi kan opdatere mig efter at have tilføjet en ny episode til listen:

Og når jeg får en opdatering fra Developer_tea, kan jeg gå videre med at downloade den nyeste episode.

Jeg nyder at lytte til Developer_tea så meget, at jeg anbefaler det til min ven, Amber. Nu vil Amber også abonnere på det.

Vi er nødt til at sikre, at Amber også får en anmeldelse, hver gang en ny episode frigives:

Hmmm, denne kode gør hvad vi vil.

Men der er et problem.

Hver gang vi vil tilføje en abonnent, er vi nødt til at omdefinere klassen.

Er der en måde at opdatere abonnentlisten uden at skulle omdefinere klassen?

Vi kan føre en abonnentliste!

Den nye Podcast-klasse fører en abonnentliste ved hjælp af to nye metoder: en til tilføjelse af abonnenter og en til fjernelse af abonnenter. Når en episode er frigivet, opdaterer vi hver abonnent.

Desværre nyder Amber ikke podcasten så meget som jeg, og beslutter at afmelde. Vi bruger metoden remove_subscribber til at fjerne hende fra abonnentlisten.

Yay! Du har lige lært Observer-mønsteret!

Designprincip bag Observer-mønsteret.

Observer-mønsteret anvender Loose Coupling-designprincippet:

Stræb efter løst koblede designs mellem genstande, der interagerer.

Podcast-klassen ved ikke meget om sine abonnenter. Det ved kun, at hver abonnent har en opdateringsmetode.

Denne løse kobling minimerer afhængigheden mellem Podcast og dets abonnenter. Det maksimerer også fleksibiliteten. Så længe den har en opdateringsmetode, kan en abonnent være hvad som helst: et menneske, en gruppe mennesker, et dyr eller endda en bil.

Takeaways:

  1. Observatormønsteret definerer en afhængighed mellem mange objekter, så når et objekt ændrer tilstand, bliver alle dets afhængige underrettet og opdateres automatisk.
  2. Princippet om løs kobling: stræb efter løst koblede design mellem genstande, der interagerer.

Tak for at have læst. Er der andre eksempler på det virkelige liv på det Observer-mønster, du kan tænke på?

Jeg udgiver ugentligt til sihui.io.

Tilmeld dig, så du ikke går glip af den næste artikel fra serien.

Næste gang skal vi tale om ...