开发过程中,免不了会有 if else 多条件判断。如何优雅的在开发中去除 if else 呢。这里提供策略加方法去除,方法如下
- 首先定义一个接口。该接口继承 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;
}
}
- 定义实现类
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);
}
}
- 通过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);
}
}
- 调用
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);
}
}