设计模式之观察者模式


定义:观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象,这个主题对象在状态发生变化的时候,会通知所有观察者对象,使他们能够自动更新自己!

UML类图

在这里插入图片描述

抽象通知者

这里方便统一管理并且通知所有观察者,一起更新状态,并且可以增加和删除观察者

abstract class SubjectMgr
{
    private List<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 item in observers){
            item.Refresh();
        }
    }
}

抽象观察者

为所有观察者定义一个统一的接口,方便通知者一起调用更新方法,方便所有观察者一起更新自己的状态

abstract class Observer 
{
    public abstract void Refresh();
}

具体通知者

 class ConcreteSubject:SubjectMgr 
{
    private string subjectState;
    public string SubjectState
    {
        get
        {
            return subjectState;
        }
        set
        {
            subjectState = value;
        }
    }
}

具体观察者

 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 Refresh()
    {
        observerState = subject.SubjectState;
        Debug.Log("观察者"+ name+"的新状态是"  + observerState);
    }

    public ConcreteSubject Subject
    {
        get
        {
            return subject;
        }
        set
        {
            subject = value;
        }
    }
}

实际调用

        ConcreteSubject s = new ConcreteSubject();
        s.Attach(new ConcreteObserver(s, "XXX"));
        s.Attach(new ConcreteObserver(s, "YYY"));
        s.Attach(new ConcreteObserver(s, "ZZZ"));
        s.SubjectState = "ABC";
        s.Notify();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值