понедельник, 2 марта 2015 г.

РЕАЛИЗАЦИЯ ПАТТЕРНА НАБЛЮДАТЕЛЬ (OBSERVER) НА СОБЫТИЯХ C#

Классический паттерн Наблюдатель имеет сильную связь между объектами, которую можно развязать использую встроенные события в c#.



// интерфейс издателя
    public delegate void eiSubjectEventHandler(eiSubject subject);

    public interface eiSubject
    {
        event eiSubjectEventHandler OnUpdate;

        void GenereteEventUpdate();

    }

// реализация класса издателя
    class ecSubject : eiSubject
    {
        private event eiSubjectEventHandler _OnUpdate = null;
        public event eiSubjectEventHandler OnUpdate
        {
            add
            {
                lock (this)
                {
                    _OnUpdate -= value;
                    _OnUpdate += value;
                }
            }
            remove { lock (this) { _OnUpdate -= value; } }
        }

        public void GenereteEventUpdate()
        {
            eiSubjectEventHandler handler = _OnUpdate;

            if (handler != null)
            {
                handler(this);
            }
        }

    }

// реализация интерфейса подписчика
    public interface eiObserver
    {
        void DoOnUpdate(eiSubject subject);

    }

// реализация класса подписчика
    class ecObserver : eiObserver
    {
        public virtual void DoOnUpdate(eiSubject subject)
        {
        }
    }


Это мой эксперементальный вариант.

Комментариев нет:

Отправить комментарий