Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Excerpt

Denne oppgaven handler om å bruke observatør-observert-teknikken for å holde et HighscoreProgram oppdatert når resultater legges inn bli informert om endringer i en HighscoreList-instans.

Observatør-observert-teknikken går ut på at det observerte objektet sier ifra til en eller flere observatører om at tilstanden er endret. I denne oppgaven skal vi lage et HighscoreProgram som oppdaterer en HighscoreList etter hvert som ulike resultater blir registrert i konsollenen HighscoreList som kan si fra til lyttere av typen ListListener når nye resultater blir registrert. En hovedprogramklasse kalt HighscoreProgram vil bli brukt til å sjekke at det virker. Denne klassen oppretter en HighscoreList-instans, legger inn resultater (tall) fra konsollet som legges til lista og skriver ut lista hver gang et nytt resultat faktisk blir lagt til.

ListListener-grensesnittet er definert som følger:

Code Block
languagejava
public interface ListListener {
    public void listChanged(ObservableList list, int pos);
}
ListListener-grensesnittet må implementers av alle klasser som ønsker å fungere som lyttere for HighscoreList-instanser. Disse registrere seg med HighscoreList sin addListListener-metode og vil siden få beskjed ved at listChanged-metoden kalles hver gang et nytt resultat kommer inn på lista.

Del 1: Implementasjon av HighscoreList

En HighscoreList skal holde styr på alle resultater av typen Comparable i en egen observerbar liste. Listen heltallsresultater (av typen int/Integer). Lista skal være observerbar ved at den kan registrere lyttere (ListListener-instanser) og si fra til dem når lista blir endret. Lista skal ha en maksimal størrelselengde, som settes i konstruktøren (konstruktøren, f.eks. skal en topp 10 liste settes som -liste kunne opprettes med new HighscoreList(10) ). HighscoreList må ha en metode for å legge til resultater i listen, addItem(Comparable). Denne metoden sorterer resultatet inn på rett plass i listen og hiver ut det siste/dårligste resultatet i listen hvis den er blitt for lang. Nye resultater registreres med metoden addResult(int), som skal finne riktig posisjon og legge resultatet inn (dersom det er godt nok). Dersom lista er for lang, så skal det dårligste resultatet fjernes.

HighscoreListen blir observert av ListListeners. Disse objektene skal gis beskjed om endringer i listen og hvilke elementer som er endret. Dette gjøres i metoden fireListChanged(int, int), som forteller alle ListListeners hvilke elementer som har blitt endret (f.eks. fra og med element 3 til og med element 10). HighscoreList må også ha metodene addListListener(ListListener) og removeListListener(ListListener), som henholdsvis legger til og fjerner observerende ListListeners.

...