设计模式之Observer

      在设计一组对象与它们所依赖的对象之间一致(同步)的交流模型时,观察者模式(Observer Pattern)很有用,它可以使对象的状态与它们所依赖的对象的状态保持同步。 Observer Pattern推荐采用发布者--订阅者(publisher--subscriber)模型,使这组观察者(Observer)和主题(Subject)对象之间有清晰的界限。比较直观的形式是“注册--通知--撤消注册”。下面描述这样一个过程:
      1.Observer将自己 注册到Subject中,Subject将Object存放在一个容器(Container)里。
      2.Observer对象发生某种变化,从Container中得到所有注册过的Observer,将变化 通知Object。
      3.Object告诉Subject要 撤消注册,Subject从Container中将Object除去。
      为了实现这种机制主题需要为注册注销和通知提供一个接口。
//interface the all observer classes should implement
public interface IObserver
{  
   void Notify(object anObject);
}
//interface that all observable classes should implement
public interface IObservable
{
   void Register(IObserver anObserver);
   void UnRegister(IObserver anObserver);
}
      下面是具体实现:
public class ObservableImpl: IObservable
{
    //container to store the observer instance
    protected Hashtable _observerContainer=new Hashtable();
    //add the observer
    public void Register(IObserver anObserver)
    {
        _observerContainer.Add(anObserver,anObserver);
    }
    //remove the observer
    public void UnRegister(IObserver anObserver)
    {
        _observerContainer.Remove(anObserver);
    }
    //common method to notify all the observers
    public void NotifyObservers(object anObject)
    {
        //enumeration the observers and invoke their notify method
        foreach(IObserver anObserver in _observerContainer.Keys)
        {
           anObserver.Notify(anObject);
        }
    }
}
      在 .NET 应用程序中可以使用这些构造,也可以引入 委托事件实现Observer Pattern,这样不必开发专用于支持该模式的特定类型。以下是一道关于Observer Pattern不错的练习题:
      猫大叫一声,所有的老鼠都开始逃跑,主人被惊醒。
要求:1.要有联动性,老鼠和主人的行为是被动的。
         2.考虑可扩展性。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值