Lecture overview -- Keyboard shortcut: 'u'  Previous page: Ansvaret for opdatering af brugergrænsefladen -- Keyboard shortcut: 'p'  Next page: Ansvaret for håndtering af events -- Keyboard shortcut: 'n'  Lecture notes - all slides and notes together  slide -- Keyboard shortcut: 't'  Help page about these notes  Alphabetic index  Course home  Play sound for this page -- Keyboard shortcut: 'y'  Page 25 : 30
Forelæsningsnoter i Objekt-orienteret Programmering
Grafiske brugergrænseflader i Java, del 1
Observer mønstret mellem model og view

Vi vender her tilbage til vores første eksempel. I stedet for at lade modellen opdatere synet direkte sender vi nu et update signal til synet, som så indhenter information om ændringen hos modellen. Baseret på denne information opdaterer synet sig selv

En simpel applet som beregner x div y og x mod y af de to tal x og y i inputfelterne. Denne brugergrænseflade er identisk med den tidligere viste. Dog er det uderliggende program lidt anderledes, idet det er baseret på observer mønstret

/user/normark/courses/prog1/prog1-01/sources/noter/../../html/noter/applets/division1/DivModPresenterObs.javaModel klassen med tilkobling og notification af observer.

Model klassen med tilkobling og notification af observer. Vi ser at nu er klassen en Observable (fremhævet med blåt). I konstruktoren kobler modelobjektet en observatør på sig selv (vist med rødt). Lige efter beregningen af kvotient og rest sender dette objekt beskederne setChanged og notifyObservers til sig selv. Dette afstedkommer, at der afsendes en update besked til alle de observers, som abonnerer på forandringer. (I de klasser vi viser her, kan vi ikke se det sted update bliver sendt. Det sker i notifyObservers, som jo er implementeret i Obervable, hvorfra modelklassen DivModCalculator arver). I dette eksempel er der kun ét objekt, som har gjort dette. Beskeden getResult bliver sendt af observeren for at finde ud af, hvad der egentlig er sket på model objektet

/user/normark/courses/prog1/prog1-01/sources/noter/../../html/noter/applets/division1/DivModPresenterObs.javaView klassen med ny update metode.

View klassen med ny update metode. Observatøren implementerer nu Interfacet Observer, som har én metode: update (vist med blåt). Metoden update (vist med lilla) trækker information tilbage fra modellen om forandringerne i dette objekt.

/user/normark/courses/prog1/prog1-01/sources/noter/../../html/noter/applets/division1/DivModPresenterObs.javaController klassen (uændret).

Controller klassen (uændret). Controlleren er ikke ændret som følge af indførelse af en observer.

Go to image seriesEn typisk interaktion mellem view, model og controller - her med observer mønstret.
 

Ved brug af observer designmønstret bliver der en minimal binding mellem model og syn

Hvis der tilføjes flere eller anderledes syn skal model programmet ikke ændres overhovedet