技术交流28群

服务热线

135-6963-3175

微信服务号

activiti之设计模式 更新时间 2016-6-3 浏览2186次

命令模式:引擎内置事务   CommandConfig

1643288255396.png

Command:定义命令的接口,声明一系列执行的方法,通常有一个execute方法的定义。

ConcreteCommand:对Command接口中的方法进行实现,通常其内部持有接收者Receiver实例,并委托接收者完成命令要求实现的功能。当然了命令模式的简化版实现可以让ConcreteCommand类去除接收者Receiver类的引用,直接完成命令要实现的功能。

Receiver:接收者,真正执行命令的对象,任何一个类或者接口都可能成为一个接收者,标准的命令模式只有它才可以实现命令中的函数。通常也可以将该类中的所有实现移植到ConcreteCommand类中。从而将Receiver和ConcreteCommand类进行合并以简化繁琐的操作。

Invoker:命令调用者,其内部可以持有很多的命令对象并调用命令对象中的执行方法,该类为客户端使用命令对象的入口。

Client:负责创建命令对象,设置命令对象的接收者。然后调度Invoker类执行命令。

注意:这里所说的Client不是常规意义上的客户端调用者对象,而是对命令和接收者进行组装的对象。也许我们可以将其称为命令装配者理解起来可能更容易让人接受一些。

命令模式

(1)首先定义一个命令的接口,示例代码如下:

public interface Command {//命令接口定义,所有的命令对象均需要实现该接口
    void execute();  // 执行方法
}

(2)接下来看一下命令的具体实现类,示例代码如下:

public class ConcreteCommand  implements Command{
private Receiver receiver = null;//持有相应的接收者对象
    public ConcreteCommand(Receiver receiver){
        this.receiver = receiver;  //构造方法中需要设置接收者
    }
    public void execute() {
    receiver.action(); //通常会转调接收者对象的相应方法,让接收者来真正执行功能
    }
}

(3)再来看一下接收者的实现,示例代码如下:

public class Receiver {
    public void action(){//真正执行命令相应的操作
      System.out.println("分享牛执行操作");//真正实现命令方法中的execute
    }
}

(4)看一下调用者Invoker的实现,示例代码如下:

public class Invoker {
 private Command command = null;//持有命令对象
    public Invoker(Command command){
        this.command = command;
    }
    public void action(){ //行动方法
        command.execute();//命令调度者负责命令的调度工作
    }
}

(5)最后看一下Client的实现,示例代码如下:

public class Client {
     public static void main(String[] args) {
            assemble();//客户端使用者调用不是上面所说的Client对象
        }
    public static void assemble() {//该函数就是上面所说的Client对象
    Receiver receiver = new Receiver(); //创建接收者
Command command = new ConcreteCommand(receiver);//创建命令对象,设定它的接收者
Invoker invoker = new Invoker(command);//创建请求者,把命令对象设置进去
   invoker.action();//执行方法
    }
}

Activiti职责链模式

连接器链:日志拦截器,上下文拦截器等。