天天看點

activiti入門系列文章12 - 設計模式Activiti社群交流群:839915498

指令模式:引擎内置事務 CommandConfig

activiti入門系列文章12 - 設計模式Activiti社群交流群:839915498

 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職責鍊模式

連接配接器鍊:日志攔截器,上下文攔截器等。

Activiti社群交流群:839915498