Hjem Personlig finansiering Forstå Observer Patterns - dummies

Forstå Observer Patterns - dummies

Innholdsfortegnelse:

Video: Double Slit Experiment explained! by Jim Al-Khalili 2024

Video: Double Slit Experiment explained! by Jim Al-Khalili 2024
Anonim

Observer-designmønsteret lar flere observatørobjekter bli varslet når et objektobjekt endres på en eller annen måte. Hver observatør registrerer med emnet, og når en endring skjer, underretter subjektet dem alle. Hver av observatørene blir varslet parallelt (det vil si samtidig).

Opprette et faggrensesnitt

Når du implementerer et mønster, er det ofte en god ide å begynne med å lage et grensesnitt for å sikre at objektene du lager, holder seg til mønsteret du prøver å bruke - spesielt hvis Flere objekter er involvert. Implementere det grensesnittet - programmering til et grensesnitt som det kalles - holder koden på linje og holder ting klarere.

Når du legger Observer-mønsteret inn i koden, sett opp et grensesnitt eller abstrakt klasse for observatørene; du vil vanligvis ha flere observatører, og du må holde metodene de implementerer konsistent.

I dette eksemplet må du også sette opp et grensesnitt for motivet, noe som observatørene ser på; Emne grensesnittet viser metodene som fagene må implementere. Sett en registerObserver metode her slik at emnet kan holde oversikt over observatører som ønsker å bli registrert. Foruten å registrere observatører, bør du ha noen måte å bli kvitt dem, så legg til en removeObserver metode. Og det er en notifyObservers metode som vil varsle observatørene om noen endringer.

offentlige grensesnitt Emne

{

offentlig tomt registerObserver (Observer o);

offentlig ugyldig removeObserver (Observer o);

offentlig ugyldig melding ();

}

Dette grensesnittet viser metodene som emner som databasesystemet skal implementere. Neste opp: grensesnittet for observatørene.

Opprette et observatørgrensesnitt

Bygg Observer-grensesnittet, implementert av observatørene for å gjøre det mulig for dem å få varsler, er enkelt. Alt du trenger er en metode som vil bli kalt når et nytt varsling er klart (du kan ringe til datautdateringen). I dette eksemplet passerer du databasen operasjonen som ble utført (for eksempel "redigere", "slette", "lage" og så videre) og posten som ble endret som strenger til oppdateringsmetoden.

offentlig grensesnitt Observer

{

offentlig ugyldig oppdatering (Stringoperasjon, String record);

}

Når observatører implementerer oppdateringsmetoden, kan emnet overføre dem posten som ble berørt og operasjonen som ble utført.

Ok, du er god å gå. Det er på tide å lage Database-emnet som skal holde styr på observatørene og varsle dem når det har skjedd en endring.

Opprette et emne

Faget må la observatører registrere og må varsle dem når en hendelse oppstår. Ifølge Emne grensesnittet, må de tre metodene et emne har å implementere i disse eksemplene: registerObserver, removeObserver, og notifyObservers. Det er det databaseklassen gjør i dette eksemplet.

For å holde oversikt over observatørene, bruk en Java-vektor som heter observatører, opprettet i Database-konstruktøren. (Typespesifikatoren her, er for Java 1. 5 eller nyere og indikerer at hvert observasjonsobjekt implementerer Observer-grensesnittet, hvis du bruker en tidligere versjon av Java, slipper du typespesifikatoren.)

Importer java. util. *;

Public Class Database implementerer Emne

{

Private Vector observatører;

offentlig database ()

{

observatører = ny vektor ();

}

.

.

.

}

Når du bruker en vektor, er det enkelt å holde oversikt over observatører. Når en observatør ønsker å registrere, kaller den fagets registerObserver-metode, som overfører seg som et objekt. Faget - et objekt av databaseklassen - må bare legge til observatøren til observatørvektoren i registerObserver-metoden, ved å bruke vektorklassens tilleggsmetode.

importer java. util. *;

Public Class Database implementerer Emne

{

Private Vector observatører;

offentlig database ()

{

observatører = ny vektor ();

}

offentlig ugyldig registerObserver (Observer o)

{

observatører. til (o);

}

.

.

.

}

Hva med å fjerne en observatør fra observatørvektoren? Ikke noe problem. Når du vil fjerne et objekt fra en vektor, kan du bruke vektorens fjerningsmetode; Slik fungerer det i databaseklassens removeObserver-metode:

importer java. util. *;

Public Class Database implementerer Emne

{

Private Vector observatører;

offentlig database ()

{

observatører = ny vektor ();

}

offentlig ugyldig registerObserver (Observer o)

{

observatører. til (o);

}

offentlig ugyldig removeObserver (Observer o)

{

observatører. fjerne (o);

}

.

.

.

}

Når brukeren faktisk gjør noe med databasen - sletter en plate, for eksempel - han kaller databaseklassens redigeringsmetode. For eksempel, for å slette post 1, kan du ringe denne metoden slik:

database. editRecord ("delete", "record 1");

Dette er hvordan redigeringsmetoden ser ut: Når denne metoden kalles, sender du den databaseoperasjonen du vil utføre, og posten du vil jobbe med, både som strenge i dette eksemplet. Disse strengene lagres slik at de kan sendes videre til observatørene. Etter at strengene er lagret, kalles notifyObservers-metoden, som kommer opp neste, for å varsle alle observatører.

importer java. util. *;

Public Class Database implementerer Emne

{

Private Vector observatører;

Private String-operasjon;

Private String Record;

offentlig database ()

{

observatører = ny vektor ();

}

.

.

.

offentlig ugyldig redigeringRecord (Stringoperasjon, String record)

{

dette.operasjon = operasjon;

dette. rekord = rekord;

notifyObservers ();

}

}

Her er kjøttet av koden, den delen som varsler hver observatør om at det har skjedd en endring: notifyObservers-metoden. Hver observatør implementerer dette eksempelets Observer-grensesnitt - som betyr at det har en oppdateringsmetode - så varsling. Observere må bare sløyfe over alle registrerte observatører i observatørvektoren, og kaller hver enkelt oppdatasjonsmetode med databasedriften og berørt plate.

importer java. util. *;

Public Class Database implementerer Emne

{

Private Vector observatører;

Private String-operasjon;

Private String Record;

.

.

.

offentlig ugyldig melding ()

{

for (int loopIndex = 0; loopIndex

Observer observatør = (Observer) observatører. få (loopIndex);

observatør. oppdatering (drift, rekord);

}

}

offentlig ugyldig redigeringRecord (Stringoperasjon, String record)

{

dette. operasjon = operasjon;

dette. rekord = rekord;

notifyObservers ();

}

}

Det er alt du trenger for Database. java, emnet i dette eksemplet. Faget vil la observatører registrere seg, avregistrere seg selv og bli varslet når en databaseoppføring er redigert (som du gjør med databaseklassens redigeringsmetode). Alt som er igjen å gjøre for å få dette showet på veien, er å skape observatørene selv.

Forstå Observer Patterns - dummies

Redaktørens valg

Hvorfor Hackers Hack - dummies

Hvorfor Hackers Hack - dummies

Hackere hack fordi de kan. Periode. Ok, det går litt dypere enn det. Hacking er en uformell hobby for noen hackere - de hacker bare for å se hva de kan og ikke kan bryte inn, som regel bare å teste sine egne systemer. Noen er obsessive om å bli kjent eller beseire datasystemer, og noen har kriminelle ...

Windows Server 2003 Administrative Tools - dummies

Windows Server 2003 Administrative Tools - dummies

I Windows Server 2003, heter Microsoft Management Console (MMC) snap-ins. Du kan få tilgang til disse Windows Server 2003-administrasjonsverktøyene ved å enten bruke Start → Administrasjonsverktøy-menyen. Skriv inn navnet på startfilen i Kjør-dialogboksen (Start → Kjør). Navn Start fil. Funksjon Active Directory Domains and Trusts-domene. msc Administrerer tillit ...

Windows 2000 Administrasjon: Arbeide med Snap-ins - dummies

Windows 2000 Administrasjon: Arbeide med Snap-ins - dummies

Snap-in er den grunnleggende komponenten av en Microsoft Management Console (MMC). Hovedkonseptet er at et snap-in alltid ligger i en MMC-konsoll. Snapin-moduler, som pluginprogrammer lastet ned fra et nettsted, kjører ikke alle alene. Som standard, når du installerer en komponent som har et snap-in tilknyttet det på en datamaskin ...

Redaktørens valg

Opprett en tabell med myndigheter i Word 2011 for Mac - dummies

Opprett en tabell med myndigheter i Word 2011 for Mac - dummies

Opprette en tabell med myndigheter i Ord i Office 2011 for Mac er en to-trinns prosess. Først markerer du valgt tekst som skal indekseres; så bruker Word den merkede teksten for å lage tabellen. Hva er et bord av myndighetene? Hvis du er advokat, advokat, advokat, advokat eller annen form for juridisk beagle, ...

Opprette SmartArt i Word 2007 - dummies

Opprette SmartArt i Word 2007 - dummies

Word 2007 inneholder en stilig funksjon kalt SmartArt, som lar deg legge til flere forskjellige typer av nyttige diagrammer til dokumentet ditt. Ideen bak SmartArt-diagrammer er å representere en punktliste som et diagram over sammenhengende former. Med SmartArt kan du opprette List, Process, Cycle, Hierarchy, Relationship, Matrix og Pyramid diagrammer. Selv om mange typer ...

Tilpasse nummererte lister i Word 2011 for Mac - dummies

Tilpasse nummererte lister i Word 2011 for Mac - dummies

De nummererte lister du oppretter i Word 2011 for Mac trenger ikke å se alt det samme. Tilpass nummererte lister ved å bruke båndet i Office 2011 for Mac. Først legger du innføringsmarkøren i et nummernivå. Hvis du vil vise nummerformat, klikker du på den lille trekanten til høyre for knappen Nummerert liste. ...

Redaktørens valg

Hvordan man fotograferer farlige dyr - dummier

Hvordan man fotograferer farlige dyr - dummier

Mens du fotograferer natur og dyreliv, husk at noen dyr er rovdyr og definitivt kan utgjøre en trussel mot en fotograf. Alligatorer, bjørner, bobcats og panthers, for å nevne noen, er dyr som du må fotografere med stor forsiktighet. Her er viktige tips for å huske når du møter et potensielt farlig dyr du vil ...

Hvordan man fotograferer fugler på flukt - dummier

Hvordan man fotograferer fugler på flukt - dummier

Fugler under flyvning er gode fag for naturfotografer. Når du fotograferer en fugl i reiret eller i hvile, kan fuglen snart ta av på leting etter mat eller til å hente byggemateriale til en rede. Denne typen mulighet er det beste fra begge verdener: Du kommer til å fotografere fugler på ...