Наблюдател () е поведенчески шаблон за дизайн, който се използва в обектно-ориентираното програмиране. Използва се в случаите, при които група от обекти (наблюдатели) след регистрацията им към регистриращ обект биват оповестявани за промени в неговото състояние.
Примери 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
Категория:Шаблони за софтуерен дизайн