java - 在 Spring Boot 应用程序中处理接口的具体实现中的重复代码
问题描述
我正在开发一个 Spring Boot 应用程序,我的界面I
如下:
public interface I {
String getType();
void f1();
}
有两个类实现接口I
如下:
@Component
class A implements I {
private final MyRepo1 myRepo1;
private final Helper helper;
public A(MyRepo1 myRepo1, Helper helper) {
this.myRepo1 = myRepo1;
this.helper = helper;
}
@Override
public String getType() {
return "type1";
}
@Override
public void f1(String type) {
int response = helper.f1(type);
if(response != -1) {
return;
}
//Add type1 specific handling here
}
}
另一类 B 实现接口 I 如下:
@Component
class B implements I {
private final MyRepo2 myRepo2;
private final Helper helper;
public B(MyRepo2 myRepo2, Helper helper) {
this.myRepo2 = myRepo2;
this.helper = helper;
}
@Override
public String getType() {
return "type2";
}
@Override
public void f1(String type) {
int response = helper.f1(type);
if(response != -1) {
return;
}
//Add type2 specific handling here
}
}
助手如下:
@Component
class Helper {
public int f1(String type) {
...
}
}
我有一个工厂类如下,用于获取适当类型的对象:
@Component
public class ServiceFactory {
private final Map<String, I>
typeToClassMap = new HashMap<>();
public ServiceFactory(List<I> components) {
for(I component : components) {
typeToClassMap.put(component.getType(), component);
}
}
}
这ServiceFactory
基本上用于根据类型获取对象。
现在,问题是,为了简单起见,我只展示了两个实现接口的类。但实际上,我有比这更多的类来实现接口I
。
某些类可能具有相同的实现f1()
,从而导致重复代码。
我不能f1()
作为接口中的默认方法,I
因为这需要依赖 bean。
我无法理解处理此问题的最佳方法是什么。
有人可以帮忙吗?
解决方案
推荐阅读
- jenkins - Jenkins 使用内部 SYSTEM 用户授权项目插件
- javascript - 自定义帖子类型单页不取消注册样式和脚本
- python - 在具有多个参数的函数上使用 np.apply_along_axis
- python - 在 python 中使用 datetime 将小时和分钟写入文本文件
- android - 如何在 ViewPager2 中按标签获取片段
- spring - Thymeleaf 布局方言“模板解析期间发生错误”
- python - python中二维数组中2点之间的距离
- java - 如何纠正我在迭代产品数组列表时的错误?
- angular - 微前端路由:Web 组件/角度元素中的角度路由器
- django - 获取请求参数不触发Django中的if语句