当前位置导航:炫浪网>>网络学院>>编程开发>>C++教程>>C++基础入门教程

ACE中的设计模式应用场景

  最近在整理以前所看文章内容时,发现了几篇2003年程序员合订本里关于 ACE的文章,当年这几篇文章中所谈到的内容就让人非常兴奋,因为在那个国内热火朝天学习设计模式的几年里,这几篇文章因为其内 容涉及到了bridge, strategy, adapter, facade等模式在这个网络通信框架中实打实的应用,让我切身体 会到了面向对象设计模式的强大火力。同时因为这几篇文章绝不是我们在学习模式应用时想当然的东西,决 不是简单的几句玩笑或不成熟的例子所能同日而语。所以我感觉还是把这几篇文章中的核心内容保存到网上 比较好。 而这样做的目的有三: 一是给自己留了个备份,免得将来书在搬家或因为别的原因丢了。 二是也希望能有更多对设计模式感兴趣但却没看过这几篇文章的朋友不要有失之交臂的感觉。 三是让我感觉最有必要的一点就是有些个别站点居然凭借自己有这方面的论文内容去卖钱(手机充值方式),我想做为原作者马维达先生看了之后也会感到很不舒服。这也是让我感到“屎可忍而尿不可忍”的地方。 好了,说了一堆废话之后开始今天的正文。

    在正文开始之前,有必要先解释一下什么是ACE,即Adapter Communicate Envirment, "适配器通信环境",这是一个C++开发的网络通信框架,其自身是开源的。因为其诞生时间早(与Linux同一年出生),且其所提供的功能很好很强大,我们可以使用它完成可跨越多种平台完成通用的通信软件任务,其中包括:事件多路分离和事件处理器分派、信号处理、服务初始化、进程间通信、共享内存管理、消息路由、分布式服务动态(重)配置、并发执行和同步等等。 且代码开发非常规范(大约100万行精心构造的C++代码),是一部不可多得的学习教材。该框架的创始人信息如下: Douglas C. Schmidt,美国Vanderbilt大学电子工程与计算机科学系教授,ACE与TAO项目的创始人。 (从美国海军到CERN物理实验室,从Boeing Advanced Avionics Systems到都能看到这两个软件的踪影) 他是中间件技术的先驱之一,在相关领域发表了百余篇学术论文。 包括Microsoft在内的许多公司都受到了他在通信软件技术方面的贡献的影响(国内也有一些网游公司使用该框架作为其通信机制实现平台)。
 
  注:因为这篇文章不是面向初学者的文章,而是对那些有一定模式使用经验,同时也对上面所说的那几 种设计模式有一定心得的朋友。相信当您看到本文中所说的几个模式的应用场景和最终的实现结果后,会有 某些心得。 当然本文的内容大部分还是来自于马先生的文章,这里决不是抄袭,而是一种回顾,当然如果您感到本人很不耻,把别人的东西拿过来给自己帖金,那么还是请您不要再看了。因为我从没有感到这是在给我自己写,而是如上面的三个目的那样,所以当您看完本文后,不必说我的人品怎么怎么样,而是应该把注意力转移到模式的应用场景中去,结合自己的开发设计心得来进行回味,而这才是我写的目的。
 
  首先介绍一下Bridge(桥模式)在ACE框架中的运用: 通信软件常常要对各种类型的事件进行多路分离、并进通行相应的处理。为使各种事件驱动的处理活动 统一起来、并得以自动化,ACE提供了叫做ACE_Reactor的事件多路分离和事件处理器分派框架。同时,为 了保证应用的可移植性,无论是在何种操作系统上,也无论底层使用了何种事件多路分离机制,ACE_Reactor所提供的接口都是一样的;并且,在有些平台上,还可以根据实际需要,在运行时更换底层所使用的事件多 路分离机制(比如在Windows上既可以使用WaitForMultipleObjects(),也可以使用select())。 Bridge模式正是ACE_Reactor具有这样的灵活性和可移植性的关键所在。 值得特别注意的是ACE_Reactor的私有成员reactor_impl_,这个指针变量正是ACE_Reactor中的“桥”
 
  实现的关键所在。
 
  ACE是具有高度可移植性的跨平台通信软件开发框架,在各种平台上提供相同的开发接口,是其重要目标之一。上面所描述的ACE_Reactor接口及相关接口,在 ACE支持的各种平台上都是相同的,但因为这些平台 提供的多路分离机制各不相同,所以在开发ACE_Reactor 时,必须为不同的平台提供不同的具体实现。要 达到这一目的,一般的做法是为每种平台定义一个继承自 ACE_Reactor类的子类,在子类中提供该平台专 用的具体实现。 但正如GoF在Design Pattern一书中所说,这样的继承把实现与抽象永久性地绑定在一起, 使得我们难以独立地修改、扩展和复用各种抽象和实现。正是基于这样的考虑,ACE的开发者在实现 ACE_Reactor时,采用了Bridge模式。
 
  下图以ACE_Select_Reactor和ACE_WFMO_Reactor为例,说明了体现在ACE_Reactor中的Bridge 模式:我们可以对照Design Pattern一书中Bridge模式的结构图来理解上面这幅图。 Abstraction(ACE_Reactor) 定义ACE_Reactor抽象的接口,并维护有一个指针reactor_impl_,指向Implementor类型的一个对象。 许多操作都将通过该指针转发给具体的Implementor对象。 RefinedAbstraction(无) 在ACE中没有定义RefinedAbstraction,但如果你想要对 ACE_Reactor接口进行扩展,就可以定义自 己的。

共4页 首页 上一页 1 2 3 4 下一页 尾页 跳转到
相关内容
赞助商链接