当前位置:首页 » 服务器技术
开发技术指南» 文章正文
    引言: 系统解耦(System decoupling) 观察者模式(Observer) 和其它形式的回调函数(callback)类似,Observer模式也允许你通过挂钩程序(hook point)改变代码。
 

 

    摘要:今天看见一个网友的留言:有一个问题请教一下兄台,对于继承自microsoft的.net framework中现有的组件,怎么将一些属性屏蔽掉,就是新的组件不提供继承来的属性,比如继承panel新编写epanel,对于panel的属性的backcolor怎么屏蔽掉?? 这个问题解决方法如下:第一步:在你的控件类中定义设计时中提供服务的类[designer(typeof (msplus.web.ui.design.webcontrols.buttondesig......
    摘要:连接器和加载器 - 目录 原著:john r. levine原文:收藏翻译:lover_p [译序] 搞底层开发的至臻境界我想大概要算操作系统开发和编译器开发了。计算机,就其字面意义,无非是冷血废铁一块,之所以有血有肉,正是操作系统从中支撑,之所以有经有脉,那便是编译器的功劳了。然而,这血肉之躯如何令周身经脉游走自如,这周身经脉又如何牵动血肉之躯动停行止,却有如不为人知的秘密,令许多初涉底层的人感到神秘异常。这便是连接器和加载器的职责了。熟......


翻译TIPatterns--系统解耦(System decoupling)

系统解耦(system decoupling)

观察者模式(observer) 【相关文章:Java中的随机数应用

  【扩展阅读:往SQL中导入数据,提示说要备份事务日志

    observer模式解决的是一个相当常见的问题:当某个对象改变状态的时候,另外一组(与之相关的)对象如何更新它们自己。比如说,smalltalk里的“model-view”结构,(它是mvc(model-view-controller)结构的一部分),再比如基本与之相当的“文档-视图(document-view)”结构。假设说你有一些数据(也就是“文档”)与多于一个的视图,比如说是一个图表(plot)与一个文本视图。当你改变数据的时候,这两个视图必须知道进而(根据需要)更新它们自己,这也就是observer模式所要帮你解决的问题。这个问题是如此的常见,以至于它的解决办法已经成了标准java.util库的一部分。 【扩展信息:Java版本名称趣谈

    与其它形式的回调函数(callback)类似,observer模式也允许你通过挂钩程序(hook point)改变代码。不同之处在于,从本质上说,observer模式是完全动态的。它经常被用于需要根据其它对象的状态变化来改变自身(状态)的场合,而且它还经常是事件管理系统(event management)的基本组成部分。无论什么时候,当你需要用完全动态的方式分离呼叫源与被呼叫代码的时候,(observer模式都是你的首选)。(最后一句话好像没写完?)

    用java实现observer模式需要用到两种类型的对象,observable类负责记住发生变化时需要通知哪些类,而不论“状态”改变与否。当被观察对象说“ok,你们(指观察者)可以根据需要更新你们自己了,”observable类通过调用notifyobservers()方法通知列表上的每个观察者,进而完成这个任务。notifyobservers()是基类observable的一个方法。

    实际上,observer模式真正变化的有两样东西:观察者(observing objects)的数量与它们如何更新自己。也就是说,observer模式使得你在不必改动其它代码的情况下只针对这两种变化更改代码。

。。。。。。(作者还没写完?)

    observer实际上是只有一个成员函数的接口类,这个成员函数就是update()。当被观察者决定更新所有的观察者的时候,它就调用update()函数。是否需要传递参数是可选的;即使是没有参数的update()函数也同样符合observer模式;但是,更通常的做法是让被观察者(通过update()函数)把引起更新的对象(也就是它自己? )与其它有用的信息传递给观察者, 因为一个观察者可能会注册到多于一个的被观察者 。这样,观察者对象就不用再费劲查找是哪个被观察者引起的更新,并且它所需要的信息也已经传递过来。

    决定何时以及如何发起更新(updating)的那个“被观察者对象”被命名为observable。

    observable类用一个标志(flag)来指示它自己是否改变。对于比较简单的设计来说,不用flag也是可以的;如果有变化,就通知所有的观察者。如果用flag的话,你可以使通知的时间延迟,并且由你来决定只在合适的时候通知观察者。但是,请注意,控制flag状态的方法是受保护的(protected),也就是说,只有(observable类的)派生类可以决定哪些东西可以构成一个变化(constitues a change),而不是由observer派生类的最终用户来决定。

    大多数工作是在notifyobservers()这个方法里完成的。如果没有将flag置为“已改变”,那notifyobservers()什么也不做;否则,它先清除flag的“已改变”状态,从而避免重复调用notifyobservers()的时候浪费时间。this is done before notifying the observers in case the calls to update() do anything that causes a change back to this observable object.


...   下一页
 ·软件需求体会---discover阶段    »显示摘要«
    摘要:我毕业后的第一个职务是软件工程师,研发部门的,但我的第一个任务,却是做调研;就 因为当时我不清楚研发和调研的细致区别,不能把角色给转换过来,所以还闹了一些笑 话,现在想来,还真是挺有意思的. 调研应该属于需求的第一阶段:需求的discover阶段.调研阶段应该完成下面的任务:了解客户现状,如客户的信息化程度,客户的算机操作水 平,客户的业务模式等;与客户沟通交流,理解客户需求等.调研完后,应该出来一份调研报告,一般称为可行性分析报告初稿.上面的事情......
» 本期热门文章:

©2000-2007 All Rights Reserved. 最佳浏览:1024X768 MSIE