观察者模式与多播委托

本文通过实例讲解了观察者模式的起源,以及如何从基础实现到高级应用,重点展示了如何让老板实时通知员工的工作状态变化。通过代码演示了ISubject接口、Boss观察者和两个观察者类的交互,展示了多播委托在同步更新多个观察者的方法。
摘要由CSDN通过智能技术生成

为什么会有观察者模式

大话设计模式中说,我们有看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成员是同步的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值