前言:当过多的if-else 在我们的代码中出现的时候,当第三者接手你的业务模块,过多的额if-else会使代码看上去又长又臭,后期维护起来成本过高,为了使代码看上去优雅,我们可以上策略模式。
目录
一、建造枚举类
二、编写策略接口
三、编写事件的实现类
三、编写获取上下文方法类
四、建立测试方法
五、测试结果显示
一、建造枚举类
package cn.jndz.master.enumd;import lombok.AllArgsConstructor;import lombok.Getter;/*** 策略方法枚举* @author chendazui* @date /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 /8/1*/public interface EventTypeInterface {/*** @return*/String eventType();}
三、编写事件的实现类
用户修改实现类:
/*** @author chendazui* @date /8/1*/@Service("UserModifyService")public class UserModifyService implements EventTypeInterface {@Overridepublic String eventType() {return "我是用户修改";}}
用户新增实现类:
/*** 策略方法实现* @author chendazui* @date /8/1*/@Service("UserTypeAddService")public class UserTypeAddService implements EventTypeInterface {@Overridepublic String eventType() {return "我是用户新增";}}
三、编写获取上下文方法类
/**** 将策略模式的方法加载到内存* @author chendazui* @date /8/1*/@Servicepublic class EventSpringContext {@Autowiredprivate 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;}