Hade tråkigt i kväll och skrev ihop denna i brist på annat att göra. Tanken var väl att det skulle komma ett par tips till men semestern tog över ;)Tips: Arbeta med Observer Pattern
Förutsätter kunskaper i OOP.
Designmönstret Observer Pattern är ett sätt att notifiera en mängd objekt att en förändring skett.
Exempel:
- En knapp har klickats på (objektet har fått status=Nedtryckt)
- En databastabell har uppdaterats
- Värdet på en variabel har ändrats
class Observable {
List<Observer> observerList;
void Attach(Observer o) {
//Spara o i observerList;
}
void Detach(Observer o) {
//Ta bort o ur observerList om den finns i listan
}
void Notify(int value) {
//Anropa Observer.update() för varje objekt som finns i observerList
}
}
class MyObservableObject extends Observable {
void changeMyValue(int value) {
Notify(value); //Detta anropar Notify i basklassen Observable
}
}
Basklassen Observable innehåller funktioner för att registrera och ta bort objekt samt att notifiera objekten som registrerats att en förändring skett.
MyObservableObject kan vara exempelvis en produkt i en mataffär, där värdet representerar vad produkten kostar.
I det exemplet är det mataffärerna som vill ha en notifiering när en uppdatering av priset skett och detta skall slå ut i alla affärer på samma gång.
class Observer {
String name;
int value;
Observer(name) {
//konstruktor
this.name = name;
}
update(int value) {
this.value = value;
print("Värdet på " + name + "har uppdaterats och är nu " + value);
}
}
För att testa detta kan exempelvis detta användas:
void Test()
{
MyObservableObject product = new MyObservableObject();
Observer shop1 = new Observer("shop 1");
Observer shop2 = new Observer("shop 2");
product.Attach(shop1);
product.Attach(shop2);
product.changeMyValue(40);
}
Detta ska generera outputen:
Värdet på shop 1 har uppdaterats och är nu 40
Värdet på shop 2 har uppdaterats och är nu 40
All kod i denna artikel är pseudokod och är alltså ej testad, koden är mest där för att ge en bild av hur Observer pattern fungerar.
Länkar om Observer Pattern:
http://www.codeproject.com/Articles/328365/Understanding-and-Implementing-Observer-Pattern-in
http://java.dzone.com/articles/design-patterns-uncovered
Sv:Tips: Arbeta med Observer Pattern