開發(fā)過程中变过,免不了會(huì)有 if else 多條件判斷硝岗。如何優(yōu)雅的在開發(fā)中去除 if else 呢莉掂。這里提供策略加方法去除朴摊,方法如下
- 首先定義一個(gè)接口默垄。該接口繼承 InitializingBean 方便為后面注入做準(zhǔn)備
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;
}
}
- 定義實(shí)現(xiàn)類
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("數(shù)據(jù):{}", num);
return num + 3;
}
@Override
public void afterPropertiesSet() {
moreStrategy.register("more2", this);
}
}
第二個(gè)實(shí)現(xiàn)類
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("數(shù)據(jù):{}", num);
return num + 3;
}
@Override
public void afterPropertiesSet() {
moreStrategy.register("more2", this);
}
}
- 通過map存儲(chǔ)實(shí)現(xiàn)類,并通過key獲取具體實(shí)現(xiàn)
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<>();
/**
* 注冊(cè)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);
}
/**
* 獲取注冊(cè)對(duì)象
*
* @param name key
* @return value
*/
public More getMoreInstance(String name) {
return map.get(name);
}
}
- 調(diào)用
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);
}
}