你没有错,这是一种战略模式。
策略
:ResultProvider接口
具体策略
:Test1ResultProvider和Test2ResultProvider
上下文
:ResultService
客户
:与ResultService交互的代码。
这是的一个版本
抽象工厂
模式(不是工厂方法,因为我们需要创建一个对象族)。
public interface ResultProvider {
Type getType();
List<DTO> search(SearchOption searchOption);
}
public class Test1ResultProvider implements ResultProvider {
@Override
public Type getType() {
return Enum.type;
}
@Override
public List<DTO> search(SearchOption searchOption) {
// Implementation
}
}
public class Test2ResultProvider implements ResultProvider {
@Override
public Type getType() {
return Enum.type2;
}
@Override
public List<DTO> search(SearchOption searchOption) {
// Implementation
}
}
public interface ResultProviderFactory {
ResultProvider create();
}
@Component("type")
public class Test1ResultProviderFactory implements ResultProviderFactory {
@Override
public ResultProvider create() {
return new Test1ResultProvider();
}
}
@Component("type2")
public class Test2ResultProviderFactory implements ResultProviderFactory {
@Override
public ResultProvider create() {
return new Test2ResultProvider();
}
}
@Service
public class ResultService {
private final Map<String, ResultProviderFactory> factoryMap;
public ResultService(Map<String, ResultProviderFactory> factories) {
factoryMap = factories;
}
public List<DTO> find(SearchOption searchOption) {
ResultProviderFactory factory = factoryMap.get(searchOption.getType().name());
if (factory != null) {
ResultProvider provider = factory.create();
return provider.search(searchOption);
} else {
throw new IllegalArgumentException("Unsupported type: " + searchOption.getType());
}
}
}