Наблюдател () е поведенчески шаблон за дизайн, който се използва в обектно-ориентираното програмиране. Използва се в случаите, при които група от обекти (наблюдатели) след регистрацията им към регистриращ обект биват оповестявани за промени в неговото състояние.

Примери C# // Наблюдател using System; using System.Collections.Generic;

namespace Observer { /// <summary> /// Observer Design Pattern – главна програма /// </summary> class MainApp

/// <summary> /// стартиращ метод на програмата /// </summary> static void Main ()

// конфигуриране ConcreteSubject objConcreteSubject = new ConcreteSubject (); objConcreteSubject.Attach (new ConcreteObserver (objConcreteSubject, "X")); objConcreteSubject.Attach (new ConcreteObserver (objConcreteSubject, "Y")); objConcreteSubject.Attach (new ConcreteObserver (objConcreteSubject, "Z")); // промени темата и съобщи за промяната на наблюдателите objConcreteSubject.SubjectState = "ABC"; objConcreteSubject.Notify (); // промени темата и съобщи за промяната на наблюдателите objConcreteSubject.SubjectState = "DEF"; objConcreteSubject.Notify ();

Console.ReadKey ();

/// <summary> /// Абстрактен клас на темата /// </summary> abstract class Subject

private List<Observer> _LstObservers = new List<Observer> (); public void Attach (Observer objObserver)

_LstObservers.Add (objObserver);

public void Detach (Observer objObserver)

_LstObservers.Remove (objObserver);

public void Notify ()

foreach (Observer objObserver in _LstObservers)

objObserver.Update ();

/// <summary> /// Конкретния клас на темата /// </summary> class ConcreteSubject : Subject

private string _subjectState; // Gets or sets subject state public string SubjectState

get { return _subjectState; } set { _subjectState = value; }

/// <summary> /// абстрактния клас на Наблюдателя /// </summary> abstract class Observer

public abstract void Update ();

/// <summary> /// Конкретния наблюдател /// </summary> class ConcreteObserver : Observer

private string _name; private string _LstObserverstate; private ConcreteSubject _subject; // Constructor public ConcreteObserver (

ConcreteSubject subject, string name)

this._subject = subject; this._name = name;

public override void Update ()

_LstObserverstate = _subject.SubjectState; Console.WriteLine ("Observer {0}'s new state is {1}", _name, _LstObserverstate);

// Сложи или предай тема public ConcreteSubject Subject

get { return _subject; } set { _subject = value; }

Java

Категория:Шаблони за софтуерен дизайн