`
猫不吃的鱼
  • 浏览: 159106 次
  • 性别: Icon_minigender_1
  • 来自: 芜湖市
社区版块
存档分类
最新评论

命令模式和activiti中的命令模式应用

阅读更多
命令模式是将行为请求者和行为实现者解耦合的方式。对命令进行封装,将命令和执行命令分隔开。请求的一方发出命令,要求执行某些操作,接受一方收到命令,执行这些操作的真正实现。请求的一方不必知道接受方的接口,以及如何被操作。

命令模式:

命令接口

public interface Command {
	public void execute();
}


命令实现类

public class ConcreteCommand implements Command{
	private Receiver receiver=null;
	private String state;
	
	public ConcreteCommand(Receiver receiver){
		this.receiver=receiver;
	}
	
	@Override
	public void execute() {
		receiver.action();
	}

}


接受者
public class Receiver {
	public void action(){
		
	}
}


命令对象入口
public class Invoker {
	private Command command=null;
	
	public void setCommand(Command command){
		this.command=command;
	}
	
	public void runCommand(){
		command.execute();
	}
}


装配者
public class Client {
	public void assemble(){
		Receiver receiver=new Receiver();
		Command command=new ConcreteCommand(receiver);
		Invoker invoker=new Invoker();
		invoker.setCommand(command);
	}
}


activiti中也有命令模式的应用

命令实现类

import org.activiti.engine.impl.interceptor.Command;
import org.activiti.engine.impl.interceptor.CommandContext;
public class ApproveCommand implements Command<Void>, Serializable {
        //请求操作真正实现者,相当于接受者Receive
	ApproveService approveService;	

	public ApproveCommand(ApproveService approveService){
		this.approveService=approveService;
	}

	public Void execute(CommandContext commandContext) {
                 //其他操作
		approveService.approve();
                 //其他操作
	}
}


命令入口invoker
import org.activiti.engine.impl.cfg.ProcessEngineConfigurationImpl;
import org.activiti.engine.impl.ServiceImpl;
@Service
public class BpmsService extends ServiceImpl {
	private ProcessEngineConfigurationImpl config;
	
	@Autowired
	public void setConfig(ProcessEngineConfigurationImpl config){
		this.config = config;
                //commandExecutor相当于装配器
		this.commandExecutor = this.config.getCommandExecutorTxRequired();
	}


	public void approve(ApproveService approveService){
		this.commandExecutor.execute(new ApproveCommand(approveService));
	}
}



@Autowired
BpmsService bpmsService;
public void test(){
    ApproveService service=new ApproveService();
    bpmsService.approve(service);
}

1
4
分享到:
评论

相关推荐

    工作流activiti源码案例

    通过深入研究这些源码案例,开发者可以更好地理解和应用Activiti工作流引擎,从而在项目中实现高效、灵活的业务流程管理。无论是流程设计、流程执行还是流程监控,都能从中获得宝贵的实践经验。

    activiti建表sql

    在IT行业中,数据库管理和数据操作是至关重要的环节,特别是在企业级应用开发中。Activiti是一个流行的开源工作流引擎,它广泛用于实现业务流程自动化。在使用Activiti时,需要先在数据库中创建相应的表结构来存储...

    activiti 工作流集成至JFinal框架

    7. **编译和使用**:由于项目已经集成了Activiti和在线编辑器,并采用Maven构建,用户只需执行简单的构建命令(如`mvn clean install`),就可以得到可运行的JFinalOA管理系统。部署后,用户可以通过Web界面进行流程...

    activiti源码-最新-中文注释

    Activiti 是一个开源的工作流和业务流程管理(BPM)引擎,它被广泛应用于企业级应用中,用于自动化业务流程。这个"activiti源码-最新-中文注释"的压缩包提供了Activiti的源代码,并且有中文注释,这对于理解和学习...

    模拟activiti的拦截器

    拦截器的概念源于设计模式中的“命令模式”和“职责链模式”。命令模式将请求封装为一个对象,使得可以使用不同的请求、队列请求或记录请求。在Activiti中,命令代表对数据库的操作,如创建任务、更新流程实例等。而...

    activiti源码

    6. **学习设计模式**: Activiti 源码中应用了许多设计模式,如工厂模式、观察者模式等,这对于提高软件设计能力很有帮助。 通过研究"activiti源码",开发者不仅可以掌握 Activiti 的工作原理,还能学习到先进的软件...

    activiti-cloud-demo-ui:已弃用,有关Activiti Cloud UI示例的信息,请参阅ADF

    activiti-cloud-demo-ui 正在安装 要轻松运行或构建应用程序,请确保您的计算机运行的是Node 8.2.0或更高版本。 使用以下命令安装所需的库。 npm install 在开发模式下运行 npm start 该命令将以监视模式编译并...

    activit-vue:activiti580

    在这款应用中,"activit-vue" 可能是将 Activiti 的功能与 Vue.js 的界面渲染能力相结合,创建了一个用户友好的流程管理系统。开发者可能通过 Vue 组件来构建工作流的图形化视图,使用户能够更直观地查看、创建和...

    java设计模式详解

    15. **命令模式**:将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或者记录请求日志;支持可撤销的操作。 16. **责任链模式**:处理请求的对象形成一条链,请求沿链传递,直到被...

    activity源码

    Activiti是一个开源的工作流和业务规则管理系统,它基于模型驱动的架构,支持BPMN 2.0标准,可以方便地集成到各种Java应用中。Activiti5.13版本是其发展的一个里程碑,包含了丰富的功能和改进。 源码分析: 1. **...

    activiTest.zip

    在调用Activiti服务时,我们应确保每个调用都包裹在Hystrix命令中,以提高系统的稳定性和容错性。 最后,流程监控是不可或缺的一环。Activiti5提供了历史数据库,记录了流程实例、任务实例等运行数据。我们可以利用...

    spring,sturt2,linux,工作流

    标题中的“spring”、“sturt2”(可能是笔误,应为“struts2”)、“linux”和“工作流”分别代表了四个关键的IT技术领域,它们在实际开发和系统运维中都有着广泛的应用。 1. **Spring框架**:Spring是Java平台上...

    Eclipse开发环境配置-indigo

    可以通过命令行模式输入java命令来检查是否安装成功。 二、Web容器安装 Web容器是Eclipse的必要组件,本系统使用Tomcat 6以上版本,提供了apache-tomcat-7.0.53.zip安装包。解压安装包到自己的电脑上,建议不要解压...

    extjs流程界面设计器参考_ExtJS工作流设计器_extjs工作流_extjs_

    这些可以通过ExtJS的命令模式和组件方法实现。 8. **验证**:设计的流程图可能需要遵循特定的规则,如不能形成循环。ExtJS的事件和数据验证机制可以用于实现这些逻辑。 9. **集成与部署**:设计完成后,工作流需要...

    java工程师求职简历_java简历.doc

    他深入理解并应用了面向对象编程思想,并且精通多种Java设计模式,如单例、装饰器、工厂和代理模式。此外,他还擅长使用Struts2、Hibernate和Spring框架,对Struts2的核心流程、Hibernate的一二级缓存以及Spring的...

    Java常见面试问题.docx

    3. **Spring Boot 自动配置**:Spring Boot利用`@EnableAutoConfiguration`注解和条件注解来自动配置Bean,简化应用的配置过程,通过扫描包路径、类依赖等方式确定需要加载的配置。 4. **库存并发控制**:通常使用...

    java工程师简历_java简历.doc

    在这个项目中,他运用了Easy UI的layout进行页面布局,使用Activiti工作流框架简化流程控制,通过Ztree实现动态菜单,并用POI框架处理Excel数据。 总的来说,郑中原是一名经验丰富的Java开发者,拥有扎实的技术基础...

    jeesite混合开发框架

    它通过DispatcherServlet进行请求分发,使用ModelAndView封装数据和视图,实现了MVC设计模式,提高了代码的结构清晰度。 **MyBatis**:MyBatis作为持久层框架,将SQL语句与Java代码分离,通过XML或注解配置SQL,...

    JAVA上百实例源码以及开源项目源代码

    在有状态SessionBean中,用累加器,以对话状态存储起来,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用完毕,从内存中清除…… Java Socket 聊天...

Global site tag (gtag.js) - Google Analytics