package observable; // grensesnittet for varsling om Idol-endringer public interface IdolFan { // lytter-metode fra IdolFan-grensesnittet public void noeEndret(Idol idol, String egenskap); } package observable; import java.util.ArrayList; import java.util.Collection; import javafx.scene.paint.Color; public class Idol { // konstanter for hårfarge- og hårlengde-egenskapene public final static String HÅRFARGEEGENSKAP = "hårfarge"; public final static String HÅRLENGDEEGENSKAP = "hårlengde"; // felt for hårfarge- og hårlengde-egenskapene private Color hårfarge; private int hårlengde; // lytter-lista, bruker Collection som type, siden vi bare bruker add og remove private Collection<IdolFan> idolFans = new ArrayList<IdolFan>(); // getter og setter for hårfarge-egenskapen public Color getHårfarge() { return hårfarge; } public void setHårfarge(Color hårfarge) { Color forrigeHårfarge = this.hårfarge; this.hårfarge = hårfarge; if (this.hårfarge != forrigeHårfarge) { siFraOmNoeEndret(HÅRFARGEEGENSKAP); } } // getter og setter for hårlengde-egenskapen public int getHårlengde() { return hårlengde; } public void setHårlengde(int hårlengde) { this.hårlengde = hårlengde; siFraOmNoeEndret(HÅRLENGDEEGENSKAP); } // håndtering av lyttere // generell hjelpemetode for å si fra om endring av egenskap private void siFraOmNoeEndret(String egenskap) { for (IdolFan idolFan : idolFans) { idolFan.noeEndret(this, egenskap); } } // registrer lytter public void addIdolFan(IdolFan idolFan) { idolFans.add(idolFan); } // avregistrer lytter public void removeIdolFan(IdolFan idolFan) { idolFans.remove(idolFan); } } package observable; import javafx.scene.paint.Color; public class Beundrer implements IdolFan { private Color hårfarge; public Color getHårfarge() { return hårfarge; } public void setHårfarge(Color hårfarge) { this.hårfarge = hårfarge; } // implementasjon av lytter-metode fra IdolFan-grensesnittet public void noeEndret(Idol idol, String egenskap) { if (egenskap.equals(Idol.HÅRFARGEEGENSKAP)) { this.setHårfarge(idol.getHårfarge()); } else if (egenskap.equals(Idol.HÅRLENGDEEGENSKAP)) { System.out.println("Hårlengde endret"); // ??? } } // public static void main(String[] args) { Idol idol = new Idol(); Beundrer beundrer1 = new Beundrer(), beundrer2 = new Beundrer(); idol.addIdolFan(beundrer1); idol.addIdolFan(beundrer2); idol.setHårfarge(Color.ALICEBLUE); idol.setHårlengde(10); } }