`
hongsoft
  • 浏览: 300101 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Shark与Adapter设计模式

阅读更多

SharkAdapter设计模式<!----><o:p></o:p>

1.?? 引言

P是个非常痴迷技术的Programmer,最近公司发了一笔还算丰厚的奖金,P乐坏了,准备也新潮一把,到向往已久的据别人说非常有趣的爪哇岛旅游一个月<o:p></o:p>

P带上必备衣物,又从网上down了一篇流传很广的<<爪哇岛旅游必备指南>>,然后阿P站在门口想了想还有什么要带的,对了,笔记本还没带呢,这个不带哪行,笔记本上还有最新下载的著名的工作流引擎Shark的源代码呢。阿P最近正研究工作流系统开发,公司让他研究Shark的源代码;唉, Shark的源代码太复杂了,他看了好多天都没个头绪,正烦呢。<o:p></o:p>

2.?? 遭遇Adapter

P一住进爪哇岛opensource镇的Apache酒店,就兴冲冲打开笔记本,准备给老妈发邮件报平安,这时,P傻眼了: 原来, 爪哇岛的电源插座都是一个口的,但他的笔记本插头是两口的啊,怎么办?

P到酒店大堂找服务生, 服务生告诉他,要去Pattern镇的城隍庙批发市场买个电源Adapter<o:p></o:p>

P到了批发市场才知道电源Adapter长什么样,原来就是一个小盒子,两边各有一个头,一头可以接爪哇岛的电源插座,另一头可以接自己的笔记本电源Adapter爪哇岛的电源接口变换成阿P所期待的另一种接口,从而使得原本因接口不匹配而无法在一起工作的两个东西在一起工作。还真是个好东西啊,阿P上前问价,什么??要30J元?就这个小东西?<o:p></o:p>

P转了一圈,还是这个价。唉,太贵了,阿P想不买了;但不买这个怎么用笔记本呢?唉,看来这个Adapter还真是不用不行。阿P横下心掏钱买了下来。<o:p></o:p>

3.什么是Shark<o:p></o:p>

P回来安排好后,准备明天出去玩,今天先看看Shark代码。阿P打开网址http://shark.objectweb.org,浏览网页:<o:p></o:p>

Shark1.0是非常著名的,根据WFMC规范实施的,可扩展功能的工作流引擎,它利用xpdl来定义流程,同时还包括服务器端的用于活动节点执行的WFMC工具代理API。这个工具代理API可以服务于JavaScript, JDBC access, EJB access, pure Java classes, Corba calls, EMail, Webservice调用。流程的存储和活动的实例化都是通过一个可定义的持久层API来完成。Shark1.0使用自带的一个轻量级Enhydra DODS O/R mapping作为自己的标准持久层,但是它同时也支持重量级的J2EE EJB持久层。Shark1.0中的每个组件例如持久层,事物管理器,脚本引擎,流程库,都是可以按照标准实施运用的,而且还可以被具体项目的模块扩展和替换。这样,shark就可以被用作servletswing程序的一个简单程序库,或者运行在J2EE容器当中(支持会话beanAPI,可能使用实体bean作为持久层),或者可以当作webservice被访问。………..”<o:p></o:p>

P看得头晕脑涨,他研究Shark前就听其他高手说过,Shark1.0 Beta2的功能和包结构相当复杂,但由于各种设计模式的使用,使得我们研究它的源代码时有章可循,思路非常清晰。高手还特别强调,一定要看看Adapter模式………..什么?Adapter……?不就是那个花了我30J元的小东西吗?P开始对这个Adapter感兴趣了…………<o:p></o:p>

4.?? 类的Adapter模式<o:p></o:p>

Programmer都是很聪明的,P也不例外,他很快就画了下面的图:

图一: 类的Adapter模式类图

Adaptee是爪哇岛的电源接口,它是一口的,就是Adapteemethod1();P的笔记本的电源接口是Target,是两口的,就是method1()method2();ClassAdapter就是那个小东西了。<o:p></o:p>

P分析: 那个小东西里面有一个小的发电机,提供method2()接口,而用了一条电线,Adapteemethod1()Targetmethod1()连接起来……<o:p></o:p>

P还用程序员的口气分析:Adaptee类没有method2()方法,而客户端期望该方法;为了使得客户端能够使用该Adaptee,我们提供一个中间类继承Adaptee,将两个API连接起来;所以, 类的Adapter模式能把被适配的类的接口转换成为目标类的接口。<o:p></o:p>

5.?? 对象的Adapter模式<o:p></o:p>

Programmer不仅很聪明,而且大都眼光犀利,P也不例外。阿P发现了一个问题: 爪哇岛的电源接口提供的电压是200V,而自己的笔记本每个接口的电压是130V,那刚才那个图的method1()就不对了………P思考了一下,马上又画了下面的图:

图二 对象的Adapter模式类图

P分析: ObjectAdaptermethod1()在调用Adapteemethod1(),减去了70V; 也就是说,那个小盒子里面加了一个电阻,分了70V的电压<o:p></o:p>

P又用程序员的口气分析: Adaptee类并没有method2()方法,而客户端期望该方法。为了使得客户端能够使用该方法,需要提供ObjectAdapter,它包装了Adaptee类的实例,从而连接两套API。所以, 对象的Adapter模式使用关联关系把被适配的类的接口转换成为目标类的接口。<o:p></o:p>

6.?? 类的Adapter模式在Shark中的应用<o:p></o:p>

分析到这里,P非常高兴,这下把Adapter的原理搞懂了,P准备看看一直看不懂的Shark源代码,看看高手说的AdapterShark里面是怎么用的

P早就知道,Shark中定义业务对象为BaseBusinessObject接口,工作流执行对象(WfExecutionObject)是一种业务对象,继承BaseBusinessObject,而流程对象(WfProcess)和活动对象(WfActivity)各是一种工作流执行对象,继承WfExecutionObject。阿P知道,工作流系统的开发,最重要的当然是流程和活动了,他准备先看看流程部分的实现…………..<o:p></o:p>

6.1代码阅读

P发现,当客户端调用流程相关接口时,Shark引擎内部将调用一个很关键的接口:WfProcessInternal接口。<o:p></o:p>

P还发现, WfProcessInternal接口的功能实现就使用了类的Adapter模式。WfProcessInternal接口就是该模式的Target,它提供activateLimitAgent()方法来激活LimitAgent模块,也提供start()方法来启动流程。该模式中的Adaptee就是WfExceutionObjectImpl,它提供了activateLimitAgent()方法的实现,但它不能实现start()方法来启动流程。<o:p></o:p>

该模式中的ClassAdapterWfProcessImpl,它的代码示例如下:<o:p></o:p>

public class WfProcessImpl extends WfExecutionObjectImpl implements WfProcessInternal<o:p></o:p>

?{<o:p></o:p>

public void start (SharkTransaction t){}<o:p></o:p>

…………<o:p></o:p>

} <o:p></o:p>

6.2代码分析<o:p></o:p>

P分析: WfProcessInternal接口就是我的笔记本接口,有两个口; WfExceutionObjectImpl类就是爪哇岛的电源插口,只有一个口; WfProcessImpl类就是那个要花30J元去买的Adapter了。<o:p></o:p>

P又用程序员的口气分析, WfProcessImpl类继承了WfExceutionObjectImpl,并实现了WfProcessInternal接口,扩展了WfExceutionObjectImpl类中没有的部分方法。由于WfProcessImpl类继承了WfExceutionObjectImpl,它可以改写WfExceutionObjectImpl类的部分方法,是标准的类的Adapter模式。<o:p></o:p>

P还惊喜地发现,不仅是WfProcessImpl类使用了类的Adapter模式, Shark引擎内部很多类的实现都使用了该模式,: WfActivityImpl类实现流程活动的管理, WfAssignmentEventAuditWrapper类实现对任务的EventAudit, WfDataEventAuditWrapper类实现对数据的EventAudit, WfStateEventAuditWrapper类实现对状态的EventAudit等等都采用了该模式。可以说, 类的Adapter

分享到:
评论

相关推荐

    Shark

    在实际应用中,"Shark"字体可能会与其他设计元素,如颜色、图像和布局相结合,以创造出协调一致的视觉效果。通过调整字体大小、行距、字间距等排版参数,可以优化阅读体验,同时保持设计的整体风格。对于网页设计,...

    Shark的体系结构分析

    Shark 的整体架构设计旨在优化Hive的查询性能,通过引入Spark计算框架,实现了SQL查询的即时执行。在Shark1.1.2 版本中,其主要组成部分包括以下几个方面: - **查询引擎**:这是Shark的核心,它负责解析SQL查询,...

    shark 工作流 文档

    - **可扩展性强**:通过模块化设计,Shark可以轻松地添加新的功能模块,满足不同业务场景的需求。 ##### 3.3 缺点 - **配置复杂**:对于初学者而言,理解和配置Shark的工作流可能较为困难。 - **性能问题**:在处理...

    编译好的c++机器学习库shark4.0

    Shark是一个开源的C++机器学习库,专为高效和灵活的统计建模而设计。它提供了多种机器学习算法,包括监督学习、无监督学习和半监督学习。在4.0版本中,Shark库已经经过了充分的优化和测试,确保了在不同平台上的稳定...

    shark1.1-2-src

    3. 分布式系统:对于分布式计算感兴趣的开发者,可以从Shark的源代码中学习到如何设计和实现一个高可用、高性能的分布式系统。 4. 教学与研究:Shark 1.1-2的源代码也是教学和研究的理想素材,它为理解分布式数据库...

    shark 1.1-2-src-2

    通过对这些源代码的深入学习和研究,开发者可以了解工作流系统的设计模式,提升对业务流程自动化理解,并能更好地应用和改进Shark,以满足特定的业务需求。同时,这也是一个学习软件工程实践,特别是大型项目组织和...

    Shark恒零基础破解教程

    Shark恒的破解教程是非常良心的,从无到有,一步一个脚印带领你去深入破解技术,这个破解教程不仅教会你如何破解,更教会你为什么这样破解

    shark 开发文档

    - 外部应用调用接口:允许第三方系统与Shark交互。 - 引擎互操作接口:支持与其他工作流引擎或系统的交互。 - 流程监视接口:提供监控工具,便于实时查看流程状态。 #### 二、Shark 引擎的启动与配置 - **启动...

    matlab开发-Shark

    在MATLAB环境中,"Shark"项目显然涉及到了水下航行器(Underwater Vehicle)的非线性六自由度(6-DOF)动力学建模与仿真。六自由度模型通常包括三个平动自由度(沿x、y、z轴的平移)和三个旋转自由度(绕x、y、z轴的...

    shark工作流实例配置说明

    Shark工作流提供丰富的API接口,便于与其他系统集成,如CRM、ERP等,实现全业务流程的无缝衔接。 ### 7. **最佳实践** - 设计清晰的流程模型,避免过多的分支和循环,提高流程的可读性和维护性。 - 合理分配任务,...

    shark恒破解教程

    shark恒破解教程

    cmdbuild shark

    **三、Shark与cmdbuild的关系** `shark-cmdbuild-2.4.3`这个文件名可能指的是cmdbuild的一个特定版本或者一个与其相关的扩展或插件。在cmdbuild社区中,"Shark"可能是一个图形用户界面(GUI)的增强版或者一个数据...

    shark 开发文档 工作流 代码解释

    Shark的工作流管理通过提供刷新和获取工作列表的API,使得开发者能够轻松地构建与业务流程相关的应用。这些API允许用户查看他们当前的任务,包括任务的状态、描述、优先级等,从而促进高效的任务管理和协作。开发者...

    shark for root

    "Shark for Root"是一款专为安卓用户设计的网络数据包捕获工具,适用于具有root权限的设备。这款工具主要用于网络诊断、应用分析以及安全测试等领域,帮助开发者和高级用户了解应用程序在网络通信中的行为。 首先,...

    shark恒破解教程两季大全共20集

    shark恒破解教程两季大全共20集,最全最强大的脱壳破解教程 此教程为电子书版

    jbpm和shark工作流引擎对比.doc

    Shark也提供了一个Flash版web设计器,但感觉不是很直观好用。 在流程定义语言方面,jbpm使用Jpdl语言,定义语言遵循WfMC规范,内容结构是按元素类型组织的。Shark使用Xpdl语言,制定的描述业务流程控制流的XML格式...

    shark1.0的源代码,现在非常难找的资料

    《深入探索Shark 1.0源代码:解密工作流与XPDL的奥秘》 在信息技术领域,源代码是软件开发的核心,它揭示了软件的内部运作机制。Shark 1.0是一个历史悠久的工作流管理系统,因其对XPDL(eXtensible Process ...

Global site tag (gtag.js) - Google Analytics