Programmering

Implementering av Observer-designmønsteret i C #

Observer-designmønsteret faller inn under kategorien Behavioral design mønster og brukes når du vil varsle om endring til en rekke klasser. Atferdsmønstre er de som brukes til å håndtere objektsamarbeid og delegering av ansvar.

I hovedsak brukes Observer-designmønsteret til å definere hvordan kommunikasjon mellom komponenter i et program samhandler med hverandre eller varsler hverandre ved å sende meldinger. I dette mønsteret opprettholder subjektet en liste over observatørene og varsler deretter disse observatørene eller de avhengige når og når en statsendring skjer. Du kan også legge til eller fjerne observatører i løpetid.

Anvendbarhet

Når skal du bruke dette designmønsteret? Det er et godt valg når du vil ha et emne som må observeres av en eller flere observatører. Det er et populært designmønster som hjelper deg med å implementere et utgiver / abonnentscenario der endringer i et objekts tilstand kan varsles til alle avhengige objekter eller abonnenter (i en typisk implementering av utgiver / abonnentscenario). I Observer-designmønsteret blir tilstandsendringene til et objekt kommunisert til et annet objekt uten behovet for at gjenstandene er tett koblet med hverandre.

MVC (Model View Component) arkitektoniske mønster er et klassisk eksempel på implementering av Observer designmønsteret. MVC arkitektoniske mønster brukes til å bygge applikasjoner som er løst koblet, lettere å teste og vedlikeholde. I en typisk MVC-implementering kobles View og Model fra hverandre. Mens visningen representerer observatøren, representerer modellen ditt observerbare objekt.

Implementering av Observer-designmønsteret

Vi har fått nok av konseptene - la oss nå forstå dette designmønsteret med en implementering. For det første trenger vi å vite de deltakende klassene eller typene.

  • Emne: Dette representeres av en type som brukes til å definere et grensesnitt for å feste eller løsne en eller flere observatører
  • Betong Emne: Dette brukes til å varsle observatører når det skjer en endring av staten
  • Observatør: Dette representerer typen som skal varsles når en endring skjer
  • ConcreteObserver: Dette representerer den konkrete implementeringen av observatørtypen

I en typisk implementering av Observer-designmønsteret, vil du kanskje ha en emnetype og en observatortype. Her er et kodebit som illustrerer dette.

offentlig abstrakt klasse Emne

    {

beskyttet liste lstObservers = ny liste ();

Protected void Register (Observer Observer)

        {

lstObservers.Add (observatør);

        }

beskyttet ugyldig UnRegister (observatør observatør)

        {

lstObservers.Remove (observatør);

        }

beskyttet ugyldig UnRegisterAll ()

        {

foreach (Observatør i lstObservers)

            {

lstObservers.Remove (observatør);

            }

        }

offentlig abstrakt ugyldig Varsle ();

    }

offentlig abstrakt klasse Observer

    {

offentlig abstrakt ugyldig Oppdatering ();

    }

Se nå kodebiten gitt ovenfor. Emneklassen inneholder en liste over Observer-forekomster og noen få metoder for å legge til eller fjerne abonnentene, dvs. forekomster av Observer-klassen. Merk at varslingsmetoden er erklært abstrakt - klassen som vil utvide emneklassen må gi den respektive implementeringen for denne metoden. Observer-klassen inneholder bare én metode - Oppdateringsmetoden. Jeg har gjort denne implementeringen så enkel som mulig.

BlogPost-klassen utvider emneklassen og implementerer varslingsmetoden som er erklært som abstrakt i emneklassen.

offentlig klasse BlogPost: Emne

    {

public void Attach (Observer observer)

        {

// Du kan skrive din egen implementering her eller ringe baseversjonen

base.Register (observatør);

        }

public void Detach (Observer observer)

        {

// Du kan skrive din egen implementering her eller ringe baseversjonen

base.UnRegister (observatør);

        }

offentlig ugyldig DetachAll ()

        {

// Du kan skrive din egen implementering her eller ringe baseversjonen

base.UnRegisterAll ();

        }

offentlig overstyring ugyldig Varsle ()

        {

foreach (Observatør observatør i lstObservers)

            {

observer.Update ();

            }

        }

    }

ConcreteObserver-klassen er gitt nedenfor. Jeg overlater til leserne å skrive sin egen kode i Update-metoden for å sende en e-post med beskjed om at en artikkel er lagt ut, eller, etc.

offentlig klasse ConcreteObserver: Observer

    {

offentlig streng E-post

        {

få; sett;

        }

offentlig overstyring ugyldig oppdatering ()

        {

Console.WriteLine ("Inside the Update method ...");

        }

    }

Du kan lære mer om Observer-designmønsteret fra denne lenken.

$config[zx-auto] not found$config[zx-overlay] not found