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