系统设计与实现,免不了需要使用枚举类型来处理一些常量值的集合。
使用枚举类型,可以在系统的逻辑处理中使用编码而不是文本来进行条件判断,并且当需要扩展或修改的时候,只需要调整1个地方就行了。
例如,以下代码通过枚举类型MessageTypeEnum来区分进行不同的逻辑处理
if (messageType.equals(MessageTypeEnum.REQUEST.name())) {
RequestMessage requestMessage = JSON.parseObject(message, RequestMessage.class);
out.add(requestMessage);
}else if (messageType.equals(MessageTypeEnum.RESPONSE.name())) {
ResponseMessage responseMessage = JSON.parseObject(message, ResponseMessage.class);
out.add(responseMessage);
}
如果没有枚举类型,则往往我们需要直接写成 if (messageType.equals(“REQUEST”),或者将REQUEST单独定义一个常量,这两种方式明显不如使用枚举类型清晰明确且易于扩展。
此外,在需要写入数据的情况下,同样可以利用枚举类型的常量性质,写入对应的值,优点与上面相同。
public RequestMessage(){
//默认设置消息类型
super.setMessageType(MessageTypeEnum.REQUEST.name());
//将发送次数初始化为0
this.setSendCount(0);
}
我们在message-common项目中,创建一个单独的包enums,对枚举值进行定义,约定所有枚举类型以Enum结尾。
以下是消息服务使用到的五个枚举值,其含义可看见注释,后面还会详细说如何使用。
/**
* 消息类型
* @author wqliu
* @date 2021-10-5 10:06
*/
public enum MessageTypeEnum
{
/**
* 请求消息
*/
REQUEST,
/**
* 响应消息
*/
RESPONSE
}
/**
* 消息状态,专用于消息客户端模式
* @author wqliu
* @date 2021-10-5 10:07
*/
public enum MessageStatusEnum
{
/**
* 待请求
*/
WAIT_REQUEST,
/**
* 已请求
*/
REQUESTED,
/**
* 已响应
*/
RESPONSED,
/**
* 无需请求(消息类型为响应消息或客户端未订阅消息)
*/
NOT_TO_REQUEST
}
/**
* 消息状态,专用于消息接口模式
* @author wqliu
* @date 2021-10-5 10:07
*/
public enum ApiMessageStatusEnum
{
/**
* 待处理
*/
WAIT_HANDLE,
/**
* 已处理
*/
HANDLED
}
/**
* 消息响应结果
* @author wqliu
*/
@Getter
public enum MessageResponseResultEnum {
/**
* 成功
*/
SUCCESS,
/**
* 错误
*/
ERROR
;
}
/**
* 对接模式
* @author wqliu
* @date 2022-1-26 14:30
*/
public enum IntegrationModelEnum {
/**
* 消息客户端
*/
CLIENT,
/**
* 接口轮询
*/
INTERFACE
}