Fork me on GitHub
跟JBPM学企业应用架构

跟JBPM学习设计模式之简单工厂模式

 

模式简介

         简单工厂模式是类的创建模式,其专门负责将大量拥有共同接口或者基类的产品类进行实例化。简单工厂模式由工厂类运行时根据传入的参数动态的决定需要实例化的类,这样客户只需要了解产品的基类,解除客户对具体产品类的依赖。简单工厂模式的结构如下图所示

 

 

图 1. 简单工厂模式结构图

 

         从图中可以看出,简单工厂模式主要涉及一下三种结构角色

1.       工厂类,其有客户端直接调用,并根据具体的业务逻辑要求创建相应的产品对象实例;

2.       产品基类,所有具体的产品类的基类或者接口,封装所有具体产品共享的行为(和数据), 客户需要了解产品基类;

3.       具体的产品类,本模式需要创建的实例的类型;

JBPM中的简单工厂模式

         JBPM中对流程引擎的对象的实例化使用了简单工厂模式。具体的模式结构图如下

 

 

 

图 2. JBPM简单工厂结构图

 

         从图中我们可以看到ProcessEngine充当了产品基类的角色,由于流程引擎在JBPM中所处的特殊地位,所以这个接口需要能够获取各种服务和业务中需要使用的一些对象实例等。

         具体的产品类是ProcessEngineImpl和SpringProcessEngine类,JBPM的流程引擎可以使用spring作为承载的环境,默认情况下会使用前者,如果我们需要使用spring,只需要在jbpm.cfg.xml中引入jbpm.tx.spring.cfg.xml即可。

         工厂类的角色是由ConfigurationImpl来实现的,其根据配置文件中是否启用spring来实例化具体的流程引擎对象。

         其实SpringProcessEngine本身也是一个精简版的简单工厂模式,其自己负责实例化自己,其同时担当了工厂和具体产品的角色。具体的类图结构如下

 

 

图 3. SpringProcessEngine精简版简单工厂设计模式

 

简单工厂模式的优劣

         该模式的核心是工厂类,其负责必要的逻辑判断(反射的话可以不需要),决定最终创建哪一个产品类的实例。客户是不负责产品类的实例化,而是仅仅使用返回的产品,实现了两者间的职责分离。

         该模式中,工厂类负责所有具体产品类的创建逻辑,所以其就对所有的产品类形成了强烈的依赖,如果产品类很多,可能对工厂类的修改就会影响到整个系统。

         当我们扩展了新的产品类的时候,需要修改工厂类,违反了开闭原则。

 

 

跟JBPM学企业应用架构

 
摘要: 跟JBPM学习设计模式之简单工厂模式模式简介 简单工厂模式是类的创建模式,其专门负责将大量拥有共同接口或者基类的产品类进行实例化。简单工厂模式由工厂类运行时根据传入的参数动态的决定需要实例化的类,这样客户只需要了解产品的基类,解除客户对具体产品类的依赖。简单工厂模式的结构如下图所示图 1. 简单工厂模式结构图 从图中可以看出,简单工厂模式主要涉及一下三种结构角色1. 工厂类,其有客户端直接调用,并根据具体的业务逻辑要求创建相应的产品对象实例;2. 产品基类,所有具体的产品类的基类或者接口,封装所有具体产品共享的行为(和数据), 客户需要了解产品基类;3. 具体的产品类,本模式需要创建的实例的.阅读全文
posted @ 2012-05-17 02:16 无风听海 阅读(607) | 评论 (0) 编辑
 
摘要: JBPM与软件架构模式之命令模式 前面我们介绍了JBPM的长事务设计,其中用到了职责链模式和命令模式,其中职责链模式我们已经介绍过了,今天我们来看看JBPM是怎样使用命令模式的。 命令模式定义 将请求封装成一个对象,使你可以使用不同的请求对客户端进行参数化;对请求排队和记录请求队列,并支持对请求的撤销操作。命令模式UML类图 命令模式代码示例 packageorg.jbpm.pvm.internal.svc;publicabstractclassCommand{protectedRecieverreviever;publicCommand(Recieverreviever){this.revi阅读全文
posted @ 2011-06-28 23:25 无风听海 阅读(204) | 评论 (0) 编辑
 
摘要: --ThreadLocal分析学习 早在JDK 1.2的版本中就提供java.lang.ThreadLocal,ThreadLocal为解决多线程程序的并发问题提供了一种新的思路。使用这个工具类可以很简洁地编写出优美的多线程程序。 ThreadLocal很容易让人望文生义,想当然地认为是一个“本地线程”。其实,ThreadLocal并不是一个Thread,而是Thread的局部变量,也许把它命名为ThreadLocalVariable更容易让人理解一些。 当使用ThreadLocal维护变量时,ThreadLocal为每个使用该变量的线程提供独立的变量副本,所以每一个线程都可以独立地改变自己的阅读全文
posted @ 2011-06-27 22:34 无风听海 阅读(147) | 评论 (0) 编辑
 
摘要: 上篇我们了解并学习了JBPM的长事务实现,其中用到了设计模式中的职责链模式和命令模式;这块还是很有厚重感的,我们可以从中学到很多的东西;今天我们先来学习一下职责链模式。 职责链模式定义 使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系;将这些对象连成一条链,并沿这条链传递该请求,直到有一个对象处理该请求。 职责链模式的优点 1.客户提交一个请求,其沿着这条链传递直到得到处理; 2. 发送者和接受者都没有对方的明确信息信息; 3. 链中对象也不知道链的结构,简化了链中对象的链接关系,它仅需要维持其后继者的引用,而不用持有它所有的候选者; 职责链模式UML图 JBPM职责链.阅读全文
posted @ 2011-06-26 15:51 无风听海 阅读(176) | 评论 (0) 编辑
 
摘要: 单例模式是我们开发中常用的一种设计模式,今天结合JBPM来学习这个模式。本来打算先分析JBPM中的单例模式,然后总结单例模式;但是JBPM的实现并不是完全符合GOF中队单例模式的完成定义,其实现跟自己的业务有一定的关联。那么我们就先来学习严格意义上的单例模式,然后再分析JBPM实现的单例模式。单例模式定义 保证一个类仅有一个实例,并提供一个访问它的全局访问点让类自己负责实例的生成,并提供访问该实例的方法 在我们实际的开发中,很多时候我们需要控制某个类的实例化,并且需要控制其只能实例化一个实例;其中一个最好的方法就是让这个类负责自己的实例化,并且保证不会有其他的实例被创建,同时向外提供一个访问.阅读全文
posted @ 2011-06-09 00:42 无风听海 阅读(124) | 评论 (0) 编辑
posted on 2012-05-18 16:51  HackerVirus  阅读(170)  评论(0编辑  收藏  举报