其他分享
首页 > 其他分享> > 观察者模式与多播委托

观察者模式与多播委托

作者:互联网

为什么会有观察者模式

大话设计模式中说,我们有看nba、看股票的员工,都希望老板进来第一时间得到通知,因此便有了观察者模式。

观察者模式的终极形态

跳过大话设计模式的观察者模式一步步进化,直接看观察者模式的终极形态,上代码

  1. 抽象通知者接口 ISubject
interface ISubject
{
    void notify();
    public string stat { get; set; }
}
  1. 被观察者boss,实现通知接口 ISubject
class Boss : ISubject
{
    public string stat { get; set; }
    public Action Update;

    public void notify()
    {
        this.Update();
    }
}
  1. 两个观察者类
class ob1
{
    public ISubject Subject { get; set; }
    public string Name { get; set; }

    public ob1(string n, ISubject s)
    {
        Name = n;
        Subject = s;
    }
    public void dowork()
    {
        System.Console.WriteLine($"{Name} 状态{Subject.stat} dowork");
    }
}
class ob2
{
    public ISubject Subject { get; set; }
    public string Name { get; set; }

    public ob2(string n, ISubject s)
    {
        Name = n;
        Subject = s;
    }

    public void doSomething()
    {
        System.Console.WriteLine($"{Name} 状态{Subject.stat} doSomething");
    }
}
  1. 测试代码
static void Main(string[] args)
{
     var boss = new Boss();
     var ob1 = new ob1("zhangsan", boss);
     var ob2 = new ob2("lisi", boss);
     boss.Update += ob1.dowork;
     boss.Update += ob2.doSomething;
     boss.stat = "666";
     boss.notify();
     Console.ReadLine();
 }

总结

被观察者boss多播委托,同时订阅多个观察者的成员方法,执行boss的notify时,多播委托触发多个观察者的事件。多个观察者都包含一个boss成员,因此多个观察者间的boss成员是同步的。

标签:多播,set,string,委托,ISubject,观察者,boss,public
来源: https://blog.csdn.net/sinat_32727833/article/details/121017766