Шаблонът за проектиране на наблюдател е шаблон за проектиране на софтуер, който определя връзка едно към много между обекти, където един обект (субектът) поддържа списък на своите зависими лица(наблюдателите) и ги уведомява автоматично за всякакви промени в състоянието. Този модел често се използва за внедряване на управлявани от събития системи, където обектите трябва да бъдат уведомени за промени в други обекти.
В C# шаблонът за проектиране на наблюдателя може да бъде имплементиран с помощта на следния код:
public interface IObserver { void Update(string message); } public class Observer : IObserver { public void Update(string message) { Console.WriteLine("Received message: " + message); } } public class Subject { private List<IObserver> observers = new List<IObserver>(); public void AddObserver(IObserver observer) { observers.Add(observer); } public void RemoveObserver(IObserver observer) { observers.Remove(observer); } public void NotifyObservers(string message) { foreach (var observer in observers) { observer.Update(message); } } }
В този пример интерфейсът IObserver дефинира метод за актуализиране на наблюдателя със съобщение. Класът Observer имплементира този интерфейс и записва съобщението в конзолата. Класът Subject поддържа списък с IObserver обекти и предоставя методи за добавяне и премахване на наблюдатели, както и метод за уведомяване на всички наблюдатели за съобщение.
В Python шаблонът за проектиране на наблюдателя може да бъде внедрен с помощта на следния код:
class Observer: def update(self, message): print("Received message: ", message) class Subject: def __init__(self): self._observers = [] def register_observer(self, observer): self._observers.append(observer) def remove_observer(self, observer): self._observers.remove(observer) def notify_observers(self, message): for observer in self._observers: observer.update(message)
В този пример класът Observer има метод за актуализиране, който отпечатва съобщението при извикване. Класът Subject поддържа списък с обекти Observer и предоставя методи за добавяне и премахване на наблюдатели, както и метод за уведомяване на всички наблюдатели за съобщение.
Пример
Ето пример за това как моделът на наблюдател може да се използва в сценарий от реалния свят. Да приемем, че създавате приложение за търговия с акции. Можете да използвате модела наблюдател, за да уведомите търговците за всякакви промени в цените на акциите, в които са инвестирали. Цените на акциите ще бъдат обект, а търговците ще бъдат наблюдатели. Всеки път, когато цените на акциите се променят, субектът уведомява търговците за промяната.
Заключение
В заключение, Observer Design Pattern е мощен инструмент за внедряване на управлявани от събития системи и отделяне на обекти един от друг. Моделът е лесен за внедряване както в C#, така и в Python и може да се използва за решаване на широк кръг от проблеми в разработката на софтуер. Той насърчава хлабавото свързване между обектите и позволява лесното добавяне и премахване на наблюдатели, което прави кода по-лесен за поддръжка.