[学习笔记:设计模式] 15_观察者模式

定义:对象间的一种一对多依赖关系,使得每当一个对象状态发生改变时,其相关依赖对象皆得到通知并被自动更新。


观察者模式包括以下4个对象:

Subject(观察目标):被观察的对象。在目标中定义了一个观察者集合,它提供一系列方法来增加和删除观察者对象,同时它定义了通知方法notify()。目标类可以是接口,也可以是抽象类或具体类。

ConcreteSubject(具体目标):是目标类的子类,通常它包含有经常发生改变的数据,当它的状态发生改变时,向它的各个观察者发出通知。

Observer(抽象观察者):将对观察目标的改变做出反应,观察者一般定义为接口,该接口声明了更新数据的方法update()。

ConcreteObserver(具体观察者):维护一个指向具体目标对象的引用,它存储具体观察者的有关状态,这些状态需要和具体目标的状态保持一致;它实现了在抽象观察者Observer中定义的update()方法。


举例
猫叫,狗听到猫叫也叫,老鼠听到猫叫就跑

- 观察目标

public abstract class Subject{
        protected List<Observer> observers = new List<Observer>();

        //注册方法
        public void Attach(Observer Observer)
        {
            observers.Add(Observer);
        }

        //注销方法
        public void Detach(Observer Observer)
        {
            observers.Remove(Observer);
        }

        //具体目标行动
        public abstract void Notify();
    }

- 具体目标(猫)

public class CatSubject : Subject
    {
        public override void Notify()
        {
            Console.WriteLine("猫叫");

            foreach(Observer c in observers)
            {
                c.Updata();
            }
        }
    }

- 抽象观察者(听到猫叫有反应的对象)

public abstract class Observer
    {
        //观察者的应激反应
        public abstract void Updata();
    }

- 具体观察者(狗、老鼠)

public class DogObserver : Observer
    {
        //听到猫叫的反应
        public override void Updata()
        {
            Console.WriteLine("狗也叫");
        }
    }


public class MouseObserver : Observer
    {
        public override void Updata()
        {
            Console.WriteLine("老鼠跑");
        }
    }


总结:观察目标类中,声明(并实现)观察者的增减方法和通知,具体目标类中实现通知方法(即通知的内容),抽象观察者中声明,具体观察者中实现收到通知后执行的方法。

ps:观察目标类和具体目标类中的通用方法,在哪实现都可以,具体目标状态改变和通知最好在具体目标类中实现

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值