如何优雅的去除 if else

开发过程中,免不了会有 if else 多条件判断。如何优雅的在开发中去除 if else 呢。这里提供策略加方法去除,方法如下

  1. 首先定义一个接口。该接口继承 InitializingBean 方便为后面注入做准备
package com.shujunjun.project.strategy.more;

import org.springframework.beans.factory.InitializingBean;

/**
 * 策略
 *
 * @author wsh
 * @since 2024/3/17 11:15
 */
public interface More extends InitializingBean {

    /**
     * 方法1
     *
     * @return str
     */
    default String method1(String param) {
        return null;
    }

    /**
     * 方法2
     *
     * @return int
     */
    default Integer method2(Integer num) {
        return 0;
    }
}
  1. 定义实现类
package com.shujunjun.project.strategy.more;

import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

/**
 * @author wsh
 * @since 2024/3/17 11:41
 */
@Slf4j
@Service
@RequiredArgsConstructor
public class More2ServiceImpl implements More {

    final MoreStrategy moreStrategy;

    @Override
    public Integer method2(Integer num) {
        log.info("数据:{}", num);
        return num + 3;
    }

    @Override
    public void afterPropertiesSet() {
        moreStrategy.register("more2", this);
    }
}

第二个实现类

package com.shujunjun.project.strategy.more;

import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

/**
 * @author wsh
 * @since 2024/3/17 11:41
 */
@Slf4j
@Service
@RequiredArgsConstructor
public class More2ServiceImpl implements More {

    final MoreStrategy moreStrategy;

    @Override
    public Integer method2(Integer num) {
        log.info("数据:{}", num);
        return num + 3;
    }

    @Override
    public void afterPropertiesSet() {
        moreStrategy.register("more2", this);
    }
}
  1. 通过map存储实现类,并通过key获取具体实现
package com.shujunjun.project.strategy.more;

import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component;

import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

/**
 * @author wsh
 * @since 2024/3/17 11:20
 */
@Component
public class MoreStrategy {

    private final Map<String, More> map = new ConcurrentHashMap<>();

    /**
     * 注册bean
     *
     * @param name key
     * @param more value
     */
    public void register(String name, More more) {
        if (StringUtils.isEmpty(name) || null == more) {
            return;
        }
        map.put(name, more);
    }

    /**
     * 获取注册对象
     *
     * @param name key
     * @return value
     */
    public More getMoreInstance(String name) {
        return map.get(name);
    }
}
  1. 调用
package com.shujunjun.project.controller;

import com.shujunjun.project.strategy.more.More;
import com.shujunjun.project.strategy.more.MoreStrategy;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@Slf4j
@RestController
@RequiredArgsConstructor
public class ProjectController {

    final MoreStrategy moreStrategy;
    
    @GetMapping(value = "more")
    public String more1(String name) {
        More moreInstance = moreStrategy.getMoreInstance(name);
        Integer i = moreInstance.method2(10);
        log.info("值:{}", i);
        return moreInstance.method1(name);
    }
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容