Versions Compared

Key

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

...

PlantUML Macro
abstract class AbstractObservable {
	void addObserver(Observer)
	void removeObserver(Observer)
}

class ConcreteObservable {
}

AbstractObservable <|-- ConcreteObservable

interface Observer {
	void update(AbstractObservable)
}

AbstractObservable -right- "*" Observer: observers

class ConcreteObserver {
}

Observer <|.. ConcreteObserver
Code Block
languagejava
abstract class AbstractObservable {
	Collection<Observer> observers;
	void addObserver(Observer)
	void removeObserver(Observer)
}

class ConcreteObservable extends AbstractObservable {
}

interface Observer {
	void update();
}

class ConcreteObserver implements Observer {
	public void update(AbstractObservable) {
		// method body
	}
}

Figuren lengst til venstre viser et klassediagram for Observatør-observert-teknikken. Den abstrakte klassen AbstractObservable implementerer støtte for lagring og registrering av lyttere av typen Observer vha. assosiasjonen observers og metoden addObserver og removeObserver. Den konkrete (ikke-abstrakte) observerbare klassen ConcreteObservable arver dette feltet og disse metodene fra AbstractObservable. Observer-grensesnittet fanger opp hva det vil si å observere (være en lytter), nemlig å implementere update-metode som reagerer på endringen i det observerte objektet. Den konkrete klassen ConcreteObserver implementerer dette grensesnittet og dermed også update-metoden.

Den tilsvarende koden er vist til høyre. Vi ser at en heltrukken arvingspil tilsvarer extends og en stiplet arvingspil tilsvarer implements.