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

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

 2009-04-02 08:23:02 来源:WEB开发网   
核心提示: l 一样的道理,ListPager也是一个观察者,无废话C#设计模式之十九:Observer(4),它需要观察ButtonPager的变动,l 注意到在ListPager和ButtonPager的ChangePage()方法中都更新了页面的索引值,再写一个ListBox控件(实现Contr

l         一样的道理,ListPager也是一个观察者。它需要观察ButtonPager的变动。

l         注意到在ListPager和ButtonPager的ChangePage()方法中都更新了页面的索引值,你或许不理解为什么Label和GridView不更新呢?其实,这并没有什么奇怪,ButtonPager翻页后通知ListPager更新状态,最需要更新的状态就是页面索引值,用户不是直接点击ListPager翻页的,当然需要更新。Label和GridView中并没有实现是因为我们并没有实现具体的一些细节,在实际应用中这些控件保存一些状态也不奇怪。

l         最后来看一看怎么牵线搭桥。我们在ButtonPager的改变页面状态事件中注册了四个代理,也就是说它改变状态后需要通知四个观察者。怎么是四个呢?还包括它自己,从逻辑上可能难以理解,其实这是可行的重用代码的方案。对ButtonPager来说,是点击哪个控件翻页的并不重要,作为主体它的责任就是通知观察者,作为观察者它的责任就是更新状态或说对事件作出响应。

l         此例完整了一个四个观察者、两个主体的观察者模式。你可能角色一个类型既是观察者又是主体不可理解,其实这在现实生活中非常多的,生物链中的大部分生物既是观察者又是主体,“螳螂捕蝉,黄雀在后”中的螳螂就是。

l         再谈谈耦合和扩展。要再增加一个下拉框分页的分页控件怎么办?无须修改原来的代码,再写一个DropDownPager(继承Pager,实现Control),并且为它的修改分页事件和所有观察者挂钩就可以了。要再增加一个ListBox控件针对不同页数显示不同数据怎么办?也无须修改原来的代码,再写一个ListBox控件(实现Control),实现翻页响应的方法,并且订阅所有Pager的翻页事件即可。

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

Tags:废话 设计模式 十九

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