WEB开发网
开发学院软件开发C语言 无废话C#设计模式之十九:Observer 阅读

无废话C#设计模式之十九:Observer

 2009-04-02 08:23:02 来源:WEB开发网   
核心提示: 代码执行结果如下图:代码说明l 在这里,我们使用C#语言事件机制来实现观察者模式,无废话C#设计模式之十九:Observer(3),虽然和GOF的“标准”模式不同,但是还是可以看出观察者模式最基本的几个角色,它一方面可以在翻页后通知GridView、Label等对象

代码执行结果如下图:

无废话C#设计模式之十九:Observer 

代码说明

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来改变状态呢。

上一页  1 2 3 4 5 6  下一页

Tags:废话 设计模式 十九

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接