设计模式(3)观察者模式

概述

在软件构建过程中,我们需要为某些对象建立一种“通知依赖关系” ——一个对象(目标对象)的状态发生改变,所有的

依赖对象(观察者对象)都将得到通知。如果耦合过强,代码的维护性和扩展性就会变差。这样一来就引出了观察者模

式(Observer),也称发布-订阅模式(Publish/Subscribe)。所有的操作都是通过调用接口来实现,将这种依赖关系

弱化,并形成一种稳定的依赖关系。从而实现软件体系结构的松耦合。 

结构图


具体模式


抽象通知者Subject类

      当观察者发生变化,通过Notify接口通知所有观察者。避免直接的实现,降低耦合。

abstract class Subject
    {
        private IList<Observer> observers = new List<Observer >();

        //增加观察者
        public void Attach(Observer observer)
        {
            observers.Add(observer );
        }
        //移除观察者
        public void Detach(Observer observer)
        {
            observers.Remove(observer );
        }

        //通知
        public void Notify()
        {
            foreach (Observer o in observers)
            {
                o.Update();
            }
        }
    }

抽象观察者Observers类

当得到主题通知时,调用Update。称为更新接口

abstract class  Observer
    {
        public abstract void Update();
    }
    abstract class Subject

具体观察者concreteObserver类

     实现抽象观察者的update接口,更新当前状态。

class ConcreteObserver : Observer
    {
        private string name;
        private string observerState;
        private ConcreteSubject subject;

        public ConcreteObserver(ConcreteSubject subject, string name)
        {
            this.subject = subject;
            this.name = name;
        }

        public override void Update()
        {                                                                                                                                                                                                                                 observerState=subject.SubjectState;
            Console.WriteLine ("观察者{0}的状态是{1}",name,observerState );
        }
    }


      客户端


static void Main(string[] args)
        {
            ConcreteSubject a = new ConcreteSubject();

            a.Attach(new ConcreteObserver (a,"b"));

            a.SubjectState = "状态a";
            a.Notify();

            Console.Read();
        }


原文地址:https://www.cnblogs.com/guziming/p/4232751.html