无废话C#设计模式之十九:Observer
2009-04-02 08:23:02 来源:WEB开发网代码执行结果如下图:
代码说明
l 在这里,我们使用C#语言事件机制来实现观察者模式,虽然和GOF的“标准”模式不同,但是还是可以看出观察者模式最基本的几个角色。要知道,GOF设计模式虽然是经典,但是毕竟是很久以前提出的,可以考虑使用C#的一些特性来改进。
l Pager类型是抽象主体角色(或者叫作被观察者、发布方、主动方、目标、主题),传统的抽象主体用于保存观察者。在这里的ChangePage方法用于在有变化后触发事件。另外,从ChangePageHandler代理中看到,我们把抽象主体作为了参数,这样,观察者就能根据主体的状态作一些调整。
l ButtonPage是一个具体主体角色。NextPage()方法中首先判断请求的页面是否超过了页面索引,如果没有超过的话,则更新页面索引并且调用了基类的ChangePage()方法来通知所有的观察者。PreviousPage()方法也是一样的道理。
l Control接口是一个抽象观察者角色(或者说观察者、订阅方、被动方),它定义了一个统一的接口,如果接受到了事件通知,则调用这个方法进行处理。
l GridView和Label则是具体观察者,可以看到它们不用考虑怎么被通知的事情,只需要考虑被通知后做什么。在这里,GridView重新绑定了数据,Label显示了页数信息。
l 这样其实已经组成了一个最基本的观察者模式的结构。获取你也注意到了,ButtonPager还实现了Control接口,说明它还是一个具体的观察者。这并没有什么不可以,它一方面可以在翻页后通知GridView、Label等对象,一方面又可以被别人通知。还记得客户需要实现一个ListPager的需求吗?在ListPager翻页后还需要通知ButtonPager来改变状态呢。
更多精彩
赞助商链接