/* * Aksje-klasse (Subject): Skal inneholde aksjens navn og pris. Den skal holde på en liste over investorer (observatører) og varsle dem når prisen endrer seg. ● Investor-grensesnitt (Observer): Skal deklarere en oppdater-metode som blir kalt når en Aksje som observeres endrer pris. ● KonkretInvestor-klasse: Skal implementere Investor-grensesnittet. ● AksjemarkedMonitor: hovedprogram med main-metode. */ import java.util.ArrayList; // observer/subscriber grensesnitt interface Investor{ void oppdater(String aksje, double nyPris); } // en klasse for konkrete investorer/observatører/subscribers class KonkretInvestor implements Investor{ private String navn; KonkretInvestor(String n){ navn = n; } @Override public void oppdater(String aksje, double nyPris){ System.out.println(navn + " har fått en oppdatering: " + aksje + " koster nå " + nyPris); } } // subjekt/publisher class Aksje{ private String navn; private double pris; private ArrayList investorer = new ArrayList<>(); public Aksje(String n, double p){ navn = n; pris = p; } public String hentNavn(){ return navn;} public double hentPris(){ return pris;} public void leggTilInvestor(Investor ny){ investorer.add(ny); } public void settNyPris(double nyPris){ pris = nyPris; for (Investor i: investorer){ i.oppdater(navn, pris); } } } class AksjemarkedMonitor{ public static void main(String[] args){ // Opprett aksjer Aksje apple = new Aksje("Apple", 150.7); Aksje microsoft = new Aksje("Microsoft", 200.2); // Opprett investorer Investor ola = new KonkretInvestor("Ola"); Investor kari = new KonkretInvestor("Kari"); // Knytt investorer til aksjer apple.leggTilInvestor(ola); apple.leggTilInvestor(kari); microsoft.leggTilInvestor(ola); // Endre kurs på aksjer apple.settNyPris(160.3); microsoft.settNyPris(180.5); } }