我有3个实体类如APO,BPO,CPO,根据前端传递给我参数param的值去判断新增到哪个实体类,如param的值如果是以“A_”开头,那么就处理APO实体类,给A表新增一条记录,类似的,以“B_”开头就去处理BPO实体类,给B表新增一条记录 能否用设计模式如策略模式或者其他模式来解决这个问题,请用springboot mybatisPlus代码示例来说明
时间: 2024-03-09 11:51:21 浏览: 220
可以使用工厂模式来解决这个问题。具体来说,使用工厂方法模式,将新增操作分离到不同的工厂类中,每个工厂类对应一个实体类,负责创建该实体类的新增操作。
示例代码如下:
1. 定义实体类APO、BPO、CPO
```java
public class APO {
// 省略属性和方法
}
public class BPO {
// 省略属性和方法
}
public class CPO {
// 省略属性和方法
}
```
2. 定义工厂类APOMapper、BPOMapper、CPOMapper
```java
public interface APOMapper {
void insert(String param);
}
@Component("APOMapper")
public class APOMapperImpl implements APOMapper {
@Autowired
private AService aService;
@Override
public void insert(String param) {
// 解析param,处理A表新增操作
String[] params = param.split("_");
String param1 = params[1];
String param2 = params[2];
APO apo = new APO();
apo.setParam1(param1);
apo.setParam2(param2);
aService.save(apo);
}
}
public interface BPOMapper {
void insert(String param);
}
@Component("BPOMapper")
public class BPOMapperImpl implements BPOMapper {
@Autowired
private BService bService;
@Override
public void insert(String param) {
// 解析param,处理B表新增操作
String[] params = param.split("_");
String param1 = params[1];
String param2 = params[2];
BPO bpo = new BPO();
bpo.setParam1(param1);
bpo.setParam2(param2);
bService.save(bpo);
}
}
public interface CPOMapper {
void insert(String param);
}
@Component("CPOMapper")
public class CPOMapperImpl implements CPOMapper {
@Autowired
private CService cService;
@Override
public void insert(String param) {
// 解析param,处理C表新增操作
String[] params = param.split("_");
String param1 = params[1];
String param2 = params[2];
CPO cpo = new CPO();
cpo.setParam1(param1);
cpo.setParam2(param2);
cService.save(cpo);
}
}
```
3. 定义工厂类EntityMapperFactory,根据传入的参数param返回对应的工厂类
```java
public class EntityMapperFactory {
@Autowired
@Qualifier("APOMapper")
private APOMapper apoMapper;
@Autowired
@Qualifier("BPOMapper")
private BPOMapper bpoMapper;
@Autowired
@Qualifier("CPOMapper")
private CPOMapper cpoMapper;
public EntityMapper getEntityMapper(String param) {
if (param.startsWith("A_")) {
return apoMapper;
} else if (param.startsWith("B_")) {
return bpoMapper;
} else if (param.startsWith("C_")) {
return cpoMapper;
} else {
throw new IllegalArgumentException("Invalid param: " + param);
}
}
}
```
4. 在服务层中使用EntityMapperFactory获取对应的工厂类,并调用insert方法进行新增操作
```java
@Service
public class EntityService {
@Autowired
private EntityMapperFactory entityMapperFactory;
public void insert(String param) {
EntityMapper mapper = entityMapperFactory.getEntityMapper(param);
mapper.insert(param);
}
}
```
这样,根据传入的参数param的值去判断新增到哪个实体类的操作就被分离到了不同的工厂类中,实现了解耦。同时,新增操作的具体实现也被封装在了对应的实体类中,符合单一职责原则。
阅读全文