/* * 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); } }