Τι Είναι το Observer Pattern;
Φαντάσου ότι έχεις έναν φίλο που είναι πολύ καλός στο να παρακολουθεί τις ειδήσεις. Κάθε φορά που συμβαίνει κάτι νέο, όπως αν βρέχει ή αν υπάρχει κάποια νέα ταινία στον κινηματογράφο, ο φίλος σου θέλει να το μάθει αμέσως.
Το Observer Pattern είναι σαν αυτό: Είναι ένας τρόπος για να έχεις έναν φίλο (ή περισσότερους) που παρακολουθούν κάτι και τους ενημερώνεις όταν συμβαίνει κάτι νέο.
Πώς Λειτουργεί;Έχεις μια Πηγή Νέων (Subject):
Αυτή είναι η πηγή που αλλάζει ή έχει νέες πληροφορίες. Σκέψου ότι είναι το δελτίο καιρού ή το κανάλι ταινιών.
Έχεις Φίλους (Observers):
Αυτοί είναι οι φίλοι που θέλουν να μάθουν όταν κάτι καινούργιο συμβαίνει.
Ενημέρωση Φίλων:
Όταν η πηγή νέων αλλάξει κάτι, όλοι οι φίλοι (οι παρατηρητές) ενημερώνονται για την αλλαγή.
Παράδειγμα στην C#
Ας δούμε πώς να χρησιμοποιήσεις το Observer Pattern στην C# με ένα απλό παράδειγμα.
Δημιουργία του Παρατηρητή (Observer):
using System;
using System.Collections.Generic;
// Κλάση που αντιπροσωπεύει την πηγή νέων
public class WeatherStation
{
private List<IWeatherObserver> observers = new List<IWeatherObserver>();
private string weather;
// Μέθοδος για να προσθέσουμε έναν παρατηρητή
public void RegisterObserver(IWeatherObserver observer)
{
observers.Add(observer);
}
// Μέθοδος για να αφαιρέσουμε έναν παρατηρητή
public void UnregisterObserver(IWeatherObserver observer)
{
observers.Remove(observer);
}
// Μέθοδος για να ενημερώσουμε όλους τους παρατηρητές
private void NotifyObservers()
{
foreach (var observer in observers)
{
observer.Update(weather);
}
}
// Μέθοδος για να αλλάξουμε τον καιρό
public void SetWeather(string newWeather)
{
weather = newWeather;
NotifyObservers();
}
}
// Διεπαφή για τον παρατηρητή
public interface IWeatherObserver
{
void Update(string weather);
}
// Κλάση που υλοποιεί τον παρατηρητή
public class WeatherDisplay : IWeatherObserver
{
private string weather;
public void Update(string weather)
{
this.weather = weather;
Console.WriteLine("Ο καιρός είναι τώρα: " + weather);
}
}
class Program
{
static void Main(string[] args)
{
// Δημιουργούμε την πηγή νέων καιρού
WeatherStation weatherStation = new WeatherStation();
// Δημιουργούμε παρατηρητές
WeatherDisplay display1 = new WeatherDisplay();
WeatherDisplay display2 = new WeatherDisplay();
// Προσθέτουμε τους παρατηρητές στην πηγή
weatherStation.RegisterObserver(display1);
weatherStation.RegisterObserver(display2);
// Αλλάζουμε τον καιρό
weatherStation.SetWeather("Ηλιοφάνεια");
weatherStation.SetWeather("Βροχή");
// Αφαιρούμε έναν παρατηρητή
weatherStation.UnregisterObserver(display2);
// Αλλάζουμε ξανά τον καιρό
weatherStation.SetWeather("Συννεφιά");
}
}
Τι Κάνουμε Εδώ:
- Πηγή Νέων (WeatherStation):
WeatherStation
είναι η πηγή που μπορεί να αλλάξει τον καιρό και να ενημερώσει τους παρατηρητές.
- Παρατηρητές (WeatherDisplay):
WeatherDisplay
είναι οι φίλοι που θέλουν να ξέρουν τον καιρό κάθε φορά που αλλάζει.
- Καταχώρηση και Αφαίρεση Παρατηρητών:
RegisterObserver
: Προσθέτει έναν νέο παρατηρητή.UnregisterObserver
: Αφαιρεί έναν παρατηρητή.
- Ενημέρωση Παρατηρητών:
NotifyObservers
: Ενημερώνει όλους τους παρατηρητές για την αλλαγή.
- Αλλαγή Νέων:
SetWeather
: Αλλάζει τον καιρό και ειδοποιεί τους παρατηρητές.
Συνοπτικά
- Observer Pattern: Ένας τρόπος για να έχεις παρατηρητές που ενημερώνονται όταν κάτι αλλάζει.
- C#: Χρησιμοποιούμε κώδικα C# για να δημιουργήσουμε την πηγή των νέων και τους παρατηρητές που θα ενημερώνονται για τις αλλαγές.