1、前言
一般我们使用枚举都是用来定义一些常量。比如我们需要一个表示订单类(pc订单、手机订单)的常量,那我们就可以使用枚举来实现,如下:
@AllArgsConstructor
public enum OrderTypeEnum{
PC("PC", "电脑端"),
PHONE("PHONE", "手机端");
private String name;
private String value;
}
接着再写一下根据name查找对应枚举的方法,枚举就算完成了。但比如我们的业务场景是这样的:我们有一个OrderTypeService接口及其实现类。
public interface OrderTypeService {
String processPc(String order);
String processPhone(String order);
}
@Service
public class OrderTypeServiceImpl implements OrderTypeService {
@Override
public String processPc(String order) {
//具体的处理pc订单的业务逻辑
System.out.println("开始处理pc订单:" + order);
return null;
}
@Override
public String processPhone(String order) {
//具体的处理phone订单的业务逻辑
System.out.println("开始处理phone订单:" + order);
return null;
}
}
根据接口的方法名我们一眼就知道,processPc是用来处理PC订单的;processPhone是用来处理PHONE订单的。然后再实际调用这两个方法的地方就需要我们进行if-else的判断。这里的if-else判断的缺点是:代码扩展性很差,如果以后又增加了其它订单类型,我们还需要改这里的if-else逻辑。
if (OrderTypeEnum.PC.equals(orderTypeEnum)) {
orderTypeService.processPc("order");
} else if (OrderTypeEnum.PHONE.equals(orderTypeEnum)) {
orderTypeService.processPhone