创建一个函数式策略方式
package com.example.study04strategy.strategy;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import java.util.HashMap;
import java.util.Map;
import java.util.function.Function;
@Component
public class FunctionInterfaceStrategy {
private Map<Integer, Function<Object, Boolean>> operationMap;
@PostConstruct
private void init() {
operationMap = new HashMap<>();
operationMap.put(1, this::taskOrder);
operationMap.put(2, this::sendOrder);
operationMap.put(3, this::signOrder);
}
public Boolean doOperation(Object params, Integer status) {
return operationMap.get(status) == null || operationMap.get(status).apply(params);
}
private Boolean taskOrder(Object params) {
System.out.println("订单未接单");
return true;
}
private Boolean sendOrder(Object params) {
System.out.println("订单未发货");
return true;
}
private Boolean signOrder(Object param) {
System.out.println("订单未签收");
return true;
}
}
测试
package com.example.study04strategy;
import com.example.study04strategy.strategy.FunctionInterfaceStrategy;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.context.ApplicationContext;
import java.util.Arrays;
@SpringBootTest
class Study04StrategyApplicationTests {
@Autowired
private FunctionInterfaceStrategy strategy;
@Autowired
ApplicationContext applicationContext;
@Test
void test1() {
String[] names = applicationContext.getBeanDefinitionNames();
System.out.println(Arrays.toString(names));
}
@Test
void test2() {
Boolean operation = strategy.doOperation("参数", 1);
System.out.println("结果: " + operation);
}
}