文章分类 | 推荐文章 | 最新文章 | 热点文章 | 最新软件 | 国产软件 | 国外软件 | 汉化补丁 | 设为首页 | 加入收藏
业界资讯 | 图形图像 | 操作系统 | 网络冲浪 | 工具软件 | 办公软件 | 媒体动画 | 精文荟萃 | 认证考试 | 网站建设 | 技术开发 | 专栏
当前位置:abcdown网络学院程序开发其他语言剪贴板中的观察者Observer模式
精品广告
推荐TOP10
·控制面板知多少
·给你十条学习Ruby语言的理由
·分页管理机制
·Perl 语言的重要价值体现
·经验技巧:分享两条Delphi开发经验
·Java编程思想:面向对象的逻辑思维方法
·Samba系统简介
阅读TOP10
·分页管理机制
·Perl 语言的重要价值体现
·图象处理中的边缘检测------canny算子
·Java编程思想:面向对象的逻辑思维方法
·Samba系统简介
·经验技巧:分享两条Delphi开发经验
·uC/OS-II在S3C44B0X微处理器上的移植
·通过Rational的工具来实现SOA治理
·Servlet和Filter的url匹配url-pattern
·Readme for the MontaVista* Linux* 3.1 OpenSSL*/OCF and Intel? IXP400 Software v1.4 Integration

剪贴板中的观察者Observer模式

日期:2007年9月4日 作者: 查看:[大字体 中字体 小字体]


  最近因为工作需要,使用到了剪贴板的特殊功能。也翻阅了一些网上介绍的资料,发现要实现类似FlashGet那样下载工具中监视剪贴板的实现方式,对我们程序设计有点借鉴的意义。

  在Windows提供的剪贴板API中,针对监视这块,提供的是注册机制。主要函数是SetClipboardViewer这个API函数。这个函数的声明是这样的(Delphi):

  function SetClipboardViewer(hWndNewViewer: HWND): HWND; stdcall;

  通过这个函数,将一个窗口句柄,注册到系统剪贴板中。可以称注册后的窗体为一个Clipboard Viewer,众多的Viewer形成一个Clipboard Viewer Chain。这个Chain是一个典型的链表,前一个记住下一个的指针。

  注册为Viewer的Handle所在的窗体,通过处理WM_CHANGECBCHAIN和WM_DRAWCLIPBOARD两个消息,来处理所有来自剪贴板的变化。处理这些消息的时候,记住向下一个Viewer传递消息,代码类似于

  SendMessage(hwndNextViewer, message, wParam, lParam);

  我重点并不是要说明代码如何编写,只是简单地介绍了这个“监控”的实现方式。我们很容易联想到,这和设计模式中提到的Observer模式是非常类似的。最大的不同点在于,剪贴板直接使用了消息系统作为解耦的方式。

  正因为有这个相似的地方,我才愿意仔细分析一下这种实现方式的优点和缺点。

  先来说说优点:

  1、目标和观察者之间完全解耦,不需要定义特定接口。

  2、观察者可以在任意Window上附加实现。这在很多窗体应用的程序来说非常方便。

  3、可以很方便地实现跨进程、线程的观察者。这得益于标准的消息机制。

  4、跨语言实现没有什么问题。

  5、使用PostMessage和SendMessage可以实现两种完全不同的更新方式。Subject可以选择等待和不等待Observer更新完成。

  看了这些有点,最重要也是最核心的,就是解耦。再来分析一下缺点:

  1、编程的过程,必须做到约定编程。约定编程和契约编程最大的差异在于没有编译机制。

  2、在观察者中可以方便地改变后续观察者的行为,也可能完全破坏其他的正常功能。据说NetAnts曾经在这方面就有过BUG,导致其他程序无法粘贴数据。

  3、一般我们的应用场景中,除了M-V(模型-视图)的模式,还有M-M(模型-模型)的方式,针对第二种方式,这种实现方式不是很适合。

  4、没有消息系统的程序中,不适合使用。比如控制台程序。

  5、对响应时间要求很高的系统,不适合。因为消息的响应时间不可控制。

  分析完上面的这些有点和缺点,我其实更倾向于从这类设计中吸取Message这个设计元素。巧妙地使用Message,可以有意想不到的效果。

  总结一下,设计模式的基本原则之一就是解耦,而Message的特性之一就是解耦。这也就是为什么我们会发现剪贴板的监视方式和我们学习的Observer模式很想像的根本。所以说他是模式一点也不为过。只不过少了点OO的味道。



上一篇:缓冲区溢出原理浅析以及防护

下一篇:SOA关键:软件交付的透明度和协作


相关软件: 相关文章:
·网络剪刀手(NetCut)V1.52
·RM RMVB RA 文件剪辑信息(ID3)批量修改工具V2.5
·APE+CUE 小剪刀V1.0.6.1220
·石头剪刀布(Cycles)
·无敌剪贴板 V3.60
·多文本剪贴板 V1.0.7
·美术欣赏-剪纸艺术欣赏
·操作系统常见问题:如何清除剪贴板中的资料
·剪辑数字影像 影像编辑软件大荟萃
·PowerPoint中轻松修改剪贴画
·Word里利用填充效果把图片裁剪成异形
·修剪随我意:裁剪MP3文件的利刃
·巧用Word剪裁图片
·剪贴板中的观察者Observer模式

特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
[打印本页] [关闭窗口] 转载请注明来源:http://www.abcdown.net
首页 | 本站声明 | 下载帮助 | 发布软件 |
中文版权所有:ABC学院 浙ICP备05000717号