前言:当过多的if-else 在我们的代码中出现的时候,当第三者接手你的业务模块,过多的额if-else会使代码看上去又长又臭,后期维护起来成本过高,为了使代码看上去优雅,我们可以上策略模式。
目录
一、建造枚举类
package cn.jndz.master.enumd;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* 策略方法枚举
* @author chendazui
* @date 2022/7/27
*/
public enum EventEnum {
/**
* 用户新增事件
*/
USER_ADD_ORG("user_add_org","UserTypeAddService","用户新增事件"),
/**
* 用户更改
*/
USER_MODIFY_ORG("user_modify_org","UserModifyService","通讯录用户更改"),
public static EventEnum getValue(String eventType) {
for (EventEnum loginEnum : EventEnum.values()) {
if (loginEnum.getEventType().equals(eventType)) {
return loginEnum;
}
}
return null;
}
private String eventType;
private String serviceName;
private String desc;
EventEnum(String eventType, String serviceName, String desc) {
this.eventType = eventType;
this.serviceName = serviceName;
this.desc = desc;
}
public String getEventType() {
return eventType;
}
public String getServiceName() {
return serviceName;
}
public String getDesc() {
return desc;
}
}
二、编写策略接口
/**
* @author chendazui
* @date 2022/8/1
*/
public interface EventTypeInterface {
/**
* @return
*/
String eventType();
}
三、编写事件的实现类
用户修改实现类:
/**
* @author chendazui
* @date 2022/8/1
*/
@Service("UserModifyService")
public class UserModifyService implements EventTypeInterface {
@Override
public String eventType() {
return "我是用户修改";
}
}
用户新增实现类:
/**
* 策略方法实现
* @author chendazui
* @date 2022/8/1
*/
@Service("UserTypeAddService")
public class UserTypeAddService implements EventTypeInterface {
@Override
public String eventType() {
return "我是用户新增";
}
}
三、编写获取上下文方法类
/**
*
* 将策略模式的方法加载到内存
* @author chendazui
* @date 2022/8/1
*/
@Service
public class EventSpringContext {
@Autowired
private final Map<String, EventTypeInterface> strategyMap = new ConcurrentHashMap<>(4);
/**
* 根据事件类型获取不同策略
* @param loginType
* @return
*/
public EventTypeInterface getService(String loginType) {
EventEnum eventEnum = EventEnum.getValue(loginType);
return strategyMap.get(eventEnum.getServiceName());
}
}
四、建立测试方法
@GetMapping("test1")
public String getTests(String eventType){
System.out.println("进来事件"+eventType);
String eventType= getEventType(eventType);
System.out.println("返回结果"+eventType);
return eventType;
}
public String getEventType(String eventType) {
EventTypeInterface service = eventSpringContext.getService(eventType);
String type= service.eventType();
return type;
}
五、测试结果显示