由于原生的交互提供的接口对于开发交互的来说入参和响应比较隐蔽,对于开发来说可能比较容易出现失误,所以有了Action,使得开发交互更加简单。

下面给出Action的定义:

public interface Action<REQ extends InteractiveBaseRequest,RESP extends InteractiveBaseResponse> {

    public void init(boolean isAsynchronous);

    public RESP action(REQ request);

    public void deInit();

}

上面是一个接口的定义,同样为了屏蔽一些不必要的方法,提供了ActionAdapter:

public abstract class ActionAdapter<REQ extends InteractiveBaseRequest,RESP extends InteractiveBaseResponse> implements Action<REQ,RESP> {
    @Override
    public void init(boolean isAsynchronous) {
        //default do nothing
    }


    @Override
    public void deInit() {
        //default do nothing
    }
}

对比一下唯一的不同是将原生的Interactioninteractive方法替换成了action方法,并且有了明显类型的入参和返回参数(作为响应)。

在不关注交互的初始化和销毁的情况下可以直接集成ActionAdapter抽象类即可,如下:

public class FirstInteraction extends ActionAdapter<FirstRequest, FirstResponse> {
    @Override
    public FirstResponse action(FirstRequest request) {
        FirstResponse firstResponse= new FirstResponse();
        firstResponse.setHello("hello world,"+request.getName()+"!");
        return firstResponse;
    }
}

这种模式也需要注意几点:
1、该模式不能个满足Interaction的嵌套调用,为什么将会在Internal Invoke介绍。