命令模式是将行为请求者和行为实现者解耦合的方式。对命令进行封装,将命令和执行命令分隔开。请求的一方发出命令,要求执行某些操作,接受一方收到命令,执行这些操作的真正实现。请求的一方不必知道接受方的接口,以及如何被操作。
命令模式:
命令接口
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);
}
分享到:
相关推荐
通过深入研究这些源码案例,开发者可以更好地理解和应用Activiti工作流引擎,从而在项目中实现高效、灵活的业务流程管理。无论是流程设计、流程执行还是流程监控,都能从中获得宝贵的实践经验。
在IT行业中,数据库管理和数据操作是至关重要的环节,特别是在企业级应用开发中。Activiti是一个流行的开源工作流引擎,它广泛用于实现业务流程自动化。在使用Activiti时,需要先在数据库中创建相应的表结构来存储...
7. **编译和使用**:由于项目已经集成了Activiti和在线编辑器,并采用Maven构建,用户只需执行简单的构建命令(如`mvn clean install`),就可以得到可运行的JFinalOA管理系统。部署后,用户可以通过Web界面进行流程...
Activiti 是一个开源的工作流和业务流程管理(BPM)引擎,它被广泛应用于企业级应用中,用于自动化业务流程。这个"activiti源码-最新-中文注释"的压缩包提供了Activiti的源代码,并且有中文注释,这对于理解和学习...
拦截器的概念源于设计模式中的“命令模式”和“职责链模式”。命令模式将请求封装为一个对象,使得可以使用不同的请求、队列请求或记录请求。在Activiti中,命令代表对数据库的操作,如创建任务、更新流程实例等。而...
6. **学习设计模式**: Activiti 源码中应用了许多设计模式,如工厂模式、观察者模式等,这对于提高软件设计能力很有帮助。 通过研究"activiti源码",开发者不仅可以掌握 Activiti 的工作原理,还能学习到先进的软件...
activiti-cloud-demo-ui 正在安装 要轻松运行或构建应用程序,请确保您的计算机运行的是Node 8.2.0或更高版本。 使用以下命令安装所需的库。 npm install 在开发模式下运行 npm start 该命令将以监视模式编译并...
在这款应用中,"activit-vue" 可能是将 Activiti 的功能与 Vue.js 的界面渲染能力相结合,创建了一个用户友好的流程管理系统。开发者可能通过 Vue 组件来构建工作流的图形化视图,使用户能够更直观地查看、创建和...
15. **命令模式**:将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或者记录请求日志;支持可撤销的操作。 16. **责任链模式**:处理请求的对象形成一条链,请求沿链传递,直到被...
Activiti是一个开源的工作流和业务规则管理系统,它基于模型驱动的架构,支持BPMN 2.0标准,可以方便地集成到各种Java应用中。Activiti5.13版本是其发展的一个里程碑,包含了丰富的功能和改进。 源码分析: 1. **...
在调用Activiti服务时,我们应确保每个调用都包裹在Hystrix命令中,以提高系统的稳定性和容错性。 最后,流程监控是不可或缺的一环。Activiti5提供了历史数据库,记录了流程实例、任务实例等运行数据。我们可以利用...
标题中的“spring”、“sturt2”(可能是笔误,应为“struts2”)、“linux”和“工作流”分别代表了四个关键的IT技术领域,它们在实际开发和系统运维中都有着广泛的应用。 1. **Spring框架**:Spring是Java平台上...
可以通过命令行模式输入java命令来检查是否安装成功。 二、Web容器安装 Web容器是Eclipse的必要组件,本系统使用Tomcat 6以上版本,提供了apache-tomcat-7.0.53.zip安装包。解压安装包到自己的电脑上,建议不要解压...
这些可以通过ExtJS的命令模式和组件方法实现。 8. **验证**:设计的流程图可能需要遵循特定的规则,如不能形成循环。ExtJS的事件和数据验证机制可以用于实现这些逻辑。 9. **集成与部署**:设计完成后,工作流需要...
他深入理解并应用了面向对象编程思想,并且精通多种Java设计模式,如单例、装饰器、工厂和代理模式。此外,他还擅长使用Struts2、Hibernate和Spring框架,对Struts2的核心流程、Hibernate的一二级缓存以及Spring的...
3. **Spring Boot 自动配置**:Spring Boot利用`@EnableAutoConfiguration`注解和条件注解来自动配置Bean,简化应用的配置过程,通过扫描包路径、类依赖等方式确定需要加载的配置。 4. **库存并发控制**:通常使用...
在这个项目中,他运用了Easy UI的layout进行页面布局,使用Activiti工作流框架简化流程控制,通过Ztree实现动态菜单,并用POI框架处理Excel数据。 总的来说,郑中原是一名经验丰富的Java开发者,拥有扎实的技术基础...
它通过DispatcherServlet进行请求分发,使用ModelAndView封装数据和视图,实现了MVC设计模式,提高了代码的结构清晰度。 **MyBatis**:MyBatis作为持久层框架,将SQL语句与Java代码分离,通过XML或注解配置SQL,...
在有状态SessionBean中,用累加器,以对话状态存储起来,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用完毕,从内存中清除…… Java Socket 聊天...