观察者模式与多播委托
作者:互联网
为什么会有观察者模式
大话设计模式中说,我们有看nba、看股票的员工,都希望老板进来第一时间得到通知,因此便有了观察者模式。
观察者模式的终极形态
跳过大话设计模式的观察者模式一步步进化,直接看观察者模式的终极形态,上代码
- 抽象通知者接口 ISubject
interface ISubject
{
void notify();
public string stat { get; set; }
}
- 被观察者boss,实现通知接口 ISubject
class Boss : ISubject
{
public string stat { get; set; }
public Action Update;
public void notify()
{
this.Update();
}
}
- 两个观察者类
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");
}
}
- 测试代码
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