phiree

博客园 首页 联系 订阅 管理

 

参与者: 订阅者, 发布者

 

1 订阅者要实现的接口:对发布者的更新做反应

 

public Interface IObserver()
{
 
void BeNoticed();
}

 

2 发布者实现的接口: 管理订阅者, 通知订阅者.

public interface ISubject
{
  
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();

         }

   }
}

实现订阅者  猫 和 人

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();

}

}

 

 

狗 猫 人 都构建好了 , 现在就把他们放在真实世界里 然后让狗叫一下 看发生了什么

 

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();

}

}

程序输出结果如下:

i am running!

i am waked up!

 

 

 

posted on 2009-03-10 14:38  phiree  阅读(2374)  评论(0编辑  收藏  举报