参与者: 订阅者, 发布者
1 订阅者要实现的接口:对发布者的更新做反应
public Interface IObserver()
{
void BeNoticed();
}
{
void BeNoticed();
}
2 发布者实现的接口: 管理订阅者, 通知订阅者.
public interface ISubject
{
void AddObserver(Observer o);
void RemoveObserver(Observer o);
void NoticeObservers();
}
{
void AddObserver(Observer o);
void RemoveObserver(Observer o);
void NoticeObservers();
}
用 狗叫 猫跑 人醒 来做例子
狗是发布者 人和猫都是订阅者 . 狗叫这个变化需要通知订阅者
public class Dog:ISubject
{
List<IObserver> observers;
public Dog()
{
observers=new List<IObserver>();
}
public void AddObserver(IObserver o)
{
observers.Add(o);
}
public void RemoveObserver(IObserver o)
{
observers.Remove(o);
}
public void Bark()
{
NoticeObservers();
}
public void NoticeObservers()
{
foreach(IObserver o in observers)
{
o.BeNoticed();
}
}
}
{
List<IObserver> observers;
public Dog()
{
observers=new List<IObserver>();
}
public void AddObserver(IObserver o)
{
observers.Add(o);
}
public void RemoveObserver(IObserver o)
{
observers.Remove(o);
}
public void Bark()
{
NoticeObservers();
}
public void NoticeObservers()
{
foreach(IObserver o in observers)
{
o.BeNoticed();
}
}
}
实现订阅者 猫 和 人
public class Cat:IObserver
{
public void Run()
{
Console.WriteLine("I am Running!");
}
public void BeNoticed()
{
Run();
}
}
public class Owner:IObserver
{
public void WakeUp()
{
Console.WriteLine("i am waked up");
}
public void BeNoticed()
{
WakeUp();
}
}
{
public void Run()
{
Console.WriteLine("I am Running!");
}
public void BeNoticed()
{
Run();
}
}
public class Owner:IObserver
{
public void WakeUp()
{
Console.WriteLine("i am waked up");
}
public void BeNoticed()
{
WakeUp();
}
}
狗 猫 人 都构建好了 , 现在就把他们放在真实世界里 然后让狗叫一下 看发生了什么
class Demo
{
void static Main()
{
Dog dog=new Dog();
Cat cat=new Cat();
Owner owner=new Owner();
dog.AddObserver(cat);
dog.AddObserver(owner);
dog.Bark();
}
}
{
void static Main()
{
Dog dog=new Dog();
Cat cat=new Cat();
Owner owner=new Owner();
dog.AddObserver(cat);
dog.AddObserver(owner);
dog.Bark();
}
}
程序输出结果如下:
i am running!
i am waked up!