观察者模式(.net规范)

2020-01-21  本文已影响0人  Rehma

观察者模式.NET规范


//.ENT命名规范 其实就是Subject
interface IObservable {
    void Register (IObserver obj);
    void Unregister (IObserver obj);
}
interface IObserver {
    void Update (); //被subject调 以达到通知目的 - - 也就是等待被通知
}

abstract class SubjectBase : IObservable {

    private List<IObserver> container = new List<IObserver> ();

    public void Register (IObserver obj) => container.Add (obj); //和下一句意义一样 语法糖

    public void Unregister (IObserver obj) { container.Add (obj); }

    protected virtual void Notify () {
        foreach (IObserver item in container) {
            item.Update ();
        }
    }
}

class Superstar : SubjectBase {
    private bool iscry;
    public bool Iscry { get { return iscry; } }

    public Superstar (bool b) { iscry = b; }

    public Superstar () : this (true) { }//为方便直接调构造

    //供子类覆盖,方便子类添加额外行为
    protected virtual void OnSend(){
        base.Notify();
    }

    //供对象调用
    public void PlayBall(){
        if (iscry)
            OnSend();
    }
}

class Fans : IObserver {
    public void Update () {
        System.Console.WriteLine ("这hmp又来装疯卖傻");
    }
}
Superstar cxk = new Superstar ();//巨星
Fans f = new Fans ();//粉丝
cxk.Register (f);//粉丝订阅巨星
cxk.PlayBall ();//打球擦破皮哭了发个动态

git地址:https://github.com/lish44/Note/blob/master/DesignPatterns/Observe3.md

上一篇 下一篇

猜你喜欢

热点阅读