C#学习之观察者模式概述及例子
观察者模式:定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主体对象,这个主题对象在状态发生变化时,会通知所有观察者。当一个对象改变需要同时改变其他对象,而且他不知道具体有多少对象需要改变的时候,应该考虑使用观察者模式。
观察者结构图:

使用场景:老板回来通知员工需要进入工作状态。
定义观察者的抽象类:
public Observer(string name, ISubject sub) { this.name = name; this.sub = sub; }
public abstract void Update(); }
看NBA直播的同事:
//使用OO
class NBAObserver2 { private string name; private ISubject2 sub;
public NBAObserver2(string name, ISubject2 sub) { this.name = name; this.sub = sub; } public void CloseStockMarket() { Console.WriteLine("{0} {1}关闭NBA直播,继续工作!", sub.SubjectState, name); } }
看股票的同事:
//使用OO
class StockObserver : Observer { public StockObserver(string name, ISubject sub) : base(name,sub) { } public override void Update() { //throw new NotImplementedException(); Console.WriteLine("{0} {1}关闭股票行情,继续工作!",sub.SubjectState,name); } }
//使用事件和委托
class StockObserver2 { private string name; private ISubject2 sub;
public StockObserver2(string name, ISubject2 sub) { this.name = name; this.sub = sub; } public void CloseNBA() { Console.WriteLine("{0} {1}关闭股票行情,继续工作!", sub.SubjectState, name); } }
上的身份是订阅者,下面定义发布者:
//使用OO
public void Attach(Observer observer) { observers.Add(observer); } public void Detach(Observer observer) { observers.Remove(observer); }
public void Notify() { foreach (Observer o in observers) { o.Update(); } } public string SubjectState { get { return action; } set { action = value; } } }
public void Notify() { Update(); }
public string SubjectState { get { return action; } set { action = value; } } }
主函数调用:
委托就是一种引用方法的类型,一旦为委托分配了方法,委托将与该方法具有完全相同的行为。委托方法的使用可以像其他任何方法一样,具有参数和返回值。委托可以看做是对函数的抽象,是函数的一个类,委托实例代表一个具体的函数,而且一个委托可以搭载多个方法,所有方法被依次唤醒。
文章来源:www.900544.com 转载请注明出处。
浙公网安备 33010602011771号