【设计模式】JAVA 枚举实现策略模式

前言:当过多的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;
    }

五、测试结果显示

 

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值