您的位置:首页 > 编程语言 > C#

C#设计模式 - 观察者模式(使用委托)

2015-07-21 09:38 746 查看
1.概念

观察者模式(有时又被称为发布-订阅Subscribe>模式、模型-视图View>模式、源-收听者Listener>模式或从属者模式)是软件设计模式的一种。在此种模式中,一个目标物件管理所有相依于它的观察者物件,并且在它本身的状态改变时主动发出通知。这通常透过呼叫各观察者所提供的方法来实现。此种模式通常被用来实现事件处理系统。

2.角色

2.1 抽象主题(Subject):它把所有观察者对象的引用保存到一个聚集里,每个主题都可以有任何数量的观察者。抽象主题提供一个接口,可以增加和删除观察者对象。

  2.2 具体主题(ConcreteSubject):将有关状态存入具体观察者对象;在具体主题内部状态改变时,给所有登记过的观察者发出通知。

  2.3 抽象观察者(Observer):为所有的具体观察者定义一个接口,在得到主题通知时更新自己。

  2.4 具体观察者(ConcreteObserver):实现抽象观察者角色所要求的更新接口,以便使本身的状态与主题状态协调。

3.具体实现之委托实现。

模拟的场景:猫叫了,老鼠跑了、主人醒了。

3.1 ISubject 抽象

public delegate void NotifyHandler();

public abstract class ISubject
{

public event NotifyHandler NotifyEvent;

protected void Notify()
{
if (NotifyEvent != null) NotifyEvent();
}

public virtual void Run() { }

}


3.2 CatSubject

public class CatSubject : ISubject
{
public override void Run()
{
Console.WriteLine("猫叫了...");
this.Notify();
}
}


3.3 Observer

public abstract class Observer
{
protected Observer(ISubject sub)
{
sub.NotifyEvent += Response;
}

public abstract void Response();
}


3.4 MouseObserver

public class MouseObserver : Observer
{
public MouseObserver(ISubject sub)
: base(sub)
{

}
public override void Response()
{
Console.WriteLine("老鼠跑了!");
}
}


3.5 MasterObserver

public class Master2Observer : Observer
{
public Master2Observer(ISubject sub):base(sub)
{

}
public override void Response()
{
Console.WriteLine("主人醒了....");
}
}


3.6 调用

var sub = new CatSubject();
var mouse = new MouseObserver(sub);
var master = new Master2Observer(sub);
sub.Run();


3.7 结果

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: