观察者模式定义了一种一对多的依赖关系,让多个观察者同时监听一个主题对象,这个主题对象在状态发生改变时会通知所有观察者对象,使他们能够自动更新自己。
场景:
猫大叫一声,老鼠逃跑,主人惊醒。
1、观察者接口
interface IObserver
{
void Response();
}
2、主题接口
interface ISubject
{
void AddObserver(IObserver o);
void RemoveObserver(IObserver o);
void Cry();
}
3、具体观察者
老鼠
class Mouse:IObserver
{
public Mouse(ISubject s)
{
s.AddObserver(this);
}
public void Response()
{
Console.WriteLine("mouse escape");
}
}
主人
class Person:IObserver
{
public Person(ISubject s)
{
s.AddObserver(this);
}
public void Response()
{
Console.WriteLine("person waked");
}
}
4、具体主题对象
class Cat:ISubject
{
List<IObserver> lstobserver;
public Cat()
{
lstobserver = new List<IObserver>();
}
public void AddObserver(IObserver o)
{
lstobserver.Add(o);
}
public void RemoveObserver(IObserver o)
{
lstobserver.Remove(o);
}
public void Cry()
{
Console.WriteLine("Cat cry");
foreach (var item in lstobserver)
{
item.Response();
}
}
}
5、客户端代码
class Program
{
static void Main(string[] args)
{
Cat c = new Cat();
Mouse m = new Mouse(c);
Person p = new Person(c);
c.Cry();
Console.ReadLine();
}
}