Hem Personliga finanser Förstå Observer Patterns - dummies

Förstå Observer Patterns - dummies

Innehållsförteckning:

Video: 2.2 Mönster och formler (aritmetisk talföljd, ta fram formel) 2024

Video: 2.2 Mönster och formler (aritmetisk talföljd, ta fram formel) 2024
Anonim

Observer-designmönstret låter flera observatörsobjekt meddelas när ett motivobjekt ändras på något sätt. Varje observatör registrerar sig med ämnet, och när en förändring uppstår, meddelar motivet dem alla. Var och en av observatörerna meddelas parallellt (det vill säga samtidigt).

Skapa ett ämnesgränssnitt

När du implementerar ett designmönster är det ofta en bra idé att börja skapa ett gränssnitt för att se till att de objekt du skapar kommer att följa det mönster du försöker använda - speciellt om flera objekt är inblandade. Genomförandet av det här gränssnittet - programmering till ett gränssnitt som det kallas - håller koden i linje och brukar hålla saker tydligare.

När du lägger Observer-mönstret i kod, ställer du in ett gränssnitt eller en abstrakt klass för observatörerna; du brukar ha flera observatörer, och du måste behålla de metoder som de implementerar konsekventa.

I det här exemplet måste du också skapa ett gränssnitt för ämnet, vilket är vad observatörerna tittar på. I ämnesgränssnittet anges de metoder som ämnena måste genomföra. Sätt ett registerObserver-metod här så att ämnet kan hålla reda på observatörer som vill bli registrerade. Förutom att registrera observatörer, borde du ha något sätt att bli av med dem, så lägg till en removeObserver-metod. Och det finns en notifyObservers-metod som meddelar observatörerna om någon förändring.

offentligt gränssnitt Ämne

{

offentligt tomt registerObserver (Observera o);

public void removeObserver (Observer o);

offentligt ogiltigt anmälerObservers ();

}

Detta gränssnitt listar de metoder som ämnen som databassystemet ska implementera. Nästa upp: gränssnittet för observatörerna.

Skapa ett observatörsgränssnitt

Bygga Observer-gränssnittet, som implementerats av observatörerna för att göra det möjligt för dem att få meddelanden, är enkelt. Allt du behöver är en metod som kommer att ringas när en ny anmälan är klar (du kan ringa den metoduppdateringen). I det här exemplet passerar du databasoperationen som utfördes (till exempel "redigera", "ta bort", "skapa" och så vidare) och posten som ändrades som strängar till uppdateringsmetoden.

offentligt gränssnittsobservatör

{

public void update (String operation, String record);

}

När observatörer implementerar uppdateringsmetoden kan ämnet vidarebefordra den post som har påverkats och den operation som utfördes.

Okej, du är bra att gå. Det är dags att skapa databasämnet som ska hålla reda på observatörerna och meddela dem när det har skett en förändring.

Skapa ett ämne

Ämnet måste låta observatörer registrera och måste meddela dem när en händelse inträffar. Enligt ämnesgränssnittet måste de tre metoder som ett ämne implementerar i dessa exempel vara: registerObserver, removeObserver och notifyObservers. Det är vad databasklassen gör i det här exemplet.

För att hålla koll på observatörerna, använd en Java-vektor som heter observatörer, skapad i databaskonstruktorn. (Typspecifikationen här är, för Java 1. 5 eller senare och indikerar att varje observerobjekt implementerar Observer-gränssnittet, om du använder en tidigare version av Java, släpp inte typspecifikationen.)

importera java. util. *;

Databaser för offentlig klass Ämne

{

privata vektorobservatörer;

offentlig databas ()

{

observatörer = ny vektor ();

}

.

.

.

}

När du använder en vektor är det enkelt att hålla reda på observatörer. När en observatör vill registrera, kallas det ämnets registerobservatormetod, som passerar sig som ett objekt. Ämnet - ett objekt i vår databasklass - behöver bara lägga till den observatören i observatörsvektorn i registretObserver-metoden, med hjälp av vektorklassens tilläggsmetod.

importera java. util. *;

Databaser för offentlig klass Ämne

{

privata vektorobservatörer;

offentlig databas ()

{

observatörer = ny vektor ();

}

public void registerObserver (Observer o)

{

observatörer. lägg (o);

}

.

.

.

}

Vad sägs om att ta bort en observatör från observatorns vektor? Inga problem. När du vill ta bort ett objekt från en vektor kan du använda vektorens borttagningsmetod. Så här fungerar det i databasklassens removeObserver-metod:

importera java. util. *;

Databaser för offentlig klass Ämne

{

privata vektorobservatörer;

offentlig databas ()

{

observatörer = ny vektor ();

}

public void registerObserver (Observer o)

{

observatörer. lägg (o);

}

public void removeObserver (Observer o)

{

observatörer. ta bort (o);

}

.

.

.

}

När användaren faktiskt gör någonting med databasen - raderar en post, till exempel - kallar han databasklassens redigeringsmetod. Om du till exempel vill radera post 1 kan du ringa den här metoden så här:

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

Så här ser redigeringsmetoden ut: När den här metoden kallas, skickar du den databasoperation du vill utföra och den post som du vill arbeta på, både som strängar i det här exemplet. Dessa strängar lagras så att de kan vidarebefordras till observatörerna. När strängarna är lagrade, kallas notifyObservers-metoden, som kommer upp nästa, att meddela alla observatörer.

importera java. util. *;

Databaser för offentlig klass Ämne

{

privata vektorobservatörer;

privat strängoperation;

Private String Record;

offentlig databas ()

{

observatörer = ny vektor ();

}

.

.

.

public void editRecord (String operation, String record)

{

detta.operation = operation;

detta. spela in = spela in

notifyObservers ();

}

}

Här är köttet i koden, den del som meddelar varje observatör att det har skett en förändring: notifyObservers-metoden. Varje observatör implementerar det här exemplet Observer-gränssnittet - vilket innebär att det har en uppdateringsmetod - så anmälerObservers behöver bara slinga över alla registrerade observatörer i observatörsvektorn, som ringer upp varje uppdateringsmetod med databasoperationen och den drabbade posten.

importera java. util. *;

Databaser för offentlig klass Ämne

{

privata vektorobservatörer;

privat strängoperation;

Private String Record;

.

.

.

public void notifyObservers ()

{

för (int loopIndex = 0; loopIndex

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

observatör. uppdatering (operation, rekord);

}

}

public void editRecord (String operation, String record)

{

detta. operation = operation;

detta. spela in = spela in

notifyObservers ();

}

}

Det är allt du behöver för databas. Java, ämnet i det här exemplet. Ämnet låter observatörer registrera sig, avregistrera sig och bli informerad när en databasrekord har redigerats (som du gör med databasklassens redigeringsmetod). Allt som är kvar att göra för att få denna show på vägen är att skapa observatörerna själva.

Förstå Observer Patterns - dummies

Redaktörens val

Hur man justerar inställningar för din bakgrund i Gamestar Mechanic - dummies

Hur man justerar inställningar för din bakgrund i Gamestar Mechanic - dummies

När du har lagt till en Bakgrund till ditt spel kan du ytterligare anpassa bakgrunden i Gamestar Mechanic genom att använda två ytterligare alternativ i dialogrutan Nivåinställningar: Bakgrundsrullning och Bakgrundsstil. Bakgrundsrullning Parallaxen är en viktig egenskap hos bakgrunden i spel där alternativet Fler skärm är valt. Redigerbar ...

Hur man balanserar svårigheten hos ett Gamestar Mechanic Game - dummies

Hur man balanserar svårigheten hos ett Gamestar Mechanic Game - dummies

Det vanligaste exemplet på balansering ett spel i Gamestar Mechanic balanserar svårigheten: Gör inte spelet så lätt att det är tråkigt och gör det inte så svårt att det är frustrerande. För att finjustera spelets svårighet måste du göra små förändringar utan att bli förbunden till ...

För att kalibrera accelerometern för ditt HTML5-spel - dummies

För att kalibrera accelerometern för ditt HTML5-spel - dummies

Som standard antar HTML5-spelaccelerometern Det neutrala läget är perfekt horisontellt - det vill säga enheten ligger platt på ett bord. Men det här är mobila enheter, och spelare vill ofta ha det neutrala stället att vara någon annanstans. Grundläggande tekniken för att kalibrera tiltkontrollen är att hålla koll på en ...

Redaktörens val

Gör äta rena förändringar i livet - dummies

Gör äta rena förändringar i livet - dummies

Rena ätförändringar i ditt liv är inte svåra att göra, men de tar lite gumption, uthållighet och övning. När du gör en koncentrerad insats för att äta lägre på livsmedelskedjan, märka hur detta beslut påverkar andra delar av ditt liv. För att vara framgångsrik måste du tänka på mat och äta annorlunda, vilka ...

Köttfri måndag och hållbarhet - dummies

Köttfri måndag och hållbarhet - dummies

Köttfri måndag är ett ganska nytt koncept som ofta nämns på Facebook och Twitter. Allt det betyder är att en dag i veckan väljer du att äta vegetarian eller vegan. Inte bara kan Meatless Monday spara pengar (eftersom kött är dyrt), men planen hjälper miljön (eftersom stora kött-, fläsk- och kycklingsanläggningar skapar nitrat ...

5 Hälsofördelar Kopplade till Medelhavsdiet - dummies

5 Hälsofördelar Kopplade till Medelhavsdiet - dummies

Medelhavsdieten har länge varit prydnad för vilket ger hälsoeffekter, såsom att minska kranskärlssjukdom och minska risken för vissa cancerformer. Inklusive färska grönsaker och frukter, baljväxter och hälsosamma fetter i din kost kan hjälpa dig att förbättra din hälsa på många sätt. Forskning visar att en traditionell medelhavsdiet minskar ...

Redaktörens val

Hur man arbetar med Nikon D3300-minneskort - dummies

Hur man arbetar med Nikon D3300-minneskort - dummies

Som mediet som lagrar dina bildfiler , Nikon D3300s minneskort är en viktig del av din kamera. Följ dessa tips för att köpa och behålla kort: Köpkort: När du handlar för ett SD-minneskort är den enda specifikationen som noterar annat än kortkapaciteten kort hastighet, vilket indikerar hur snabbt data ...

Timerfotografering: Nikon D5200-dummies med Nikon D5200

Timerfotografering: Nikon D5200-dummies med Nikon D5200

Med intervall Timer Fotografering på Nikon D5200, du kan ställa in kameran för att automatiskt släppa avtryckaren med intervall som sträcker sig från sekunder till timmar från varandra. Med den här funktionen kan du fånga upp ett ämne eftersom det förändras över tiden - en teknik som är känd som fotografering med tidsfördröjning - utan att behöva stå runt på ...

JPEG Filer på Nikon D3300-dummies

JPEG Filer på Nikon D3300-dummies

Uttalad "jay-peg", det här formatet är standardinställningen på din Nikon D3300, som det är på de flesta digitalkameror. JPEG är populär av två huvudorsaker: Omedelbar användbarhet: Alla webbläsare och e-postprogram kan visa JPEG-filer, så att du kan dela bilder online direkt efter att du har tagit dem. Du kan också få en ...