java mvc框架 controller getMapping 使用策略模式代替if-else根据openid和不同实现类查询不同信息添加到model中返回不同页面,写一个例子
时间: 2023-05-23 19:02:21 浏览: 100
策略模式 以及实现的一个例子
好的,下面是一个简单的例子:
首先,定义一个接口,如下:
```
public interface UserInfoService {
UserInfo getUserInfo(String openid);
}
```
然后,定义不同的实现类,如下:
```
@Component
public class UserInfoServiceA implements UserInfoService {
@Override
public UserInfo getUserInfo(String openid) {
// 使用openid查询用户信息,返回UserInfo对象
}
}
@Component
public class UserInfoServiceB implements UserInfoService {
@Override
public UserInfo getUserInfo(String openid) {
// 使用openid查询用户信息,返回UserInfo对象
}
}
```
接下来,定义一个使用策略模式的Controller,如下:
```
@Controller
@RequestMapping("/user")
public class UserController {
@Autowired
private List<UserInfoService> userInfoServices;
@GetMapping("/{openid}")
public String getUserInfo(@PathVariable String openid, Model model) {
for (UserInfoService userInfoService: userInfoServices) {
UserInfo userInfo = userInfoService.getUserInfo(openid);
if (userInfo != null) {
model.addAttribute("userInfo", userInfo);
return userInfo.getType();
}
}
return "error";
}
}
```
在上面的代码中,我们使用@Autowired注解将所有的UserInfoService实现类注入到List中,并使用for循环遍历List,根据openid查询不同的用户信息,然后将其添加到Model中,并返回不同的页面。如你所见,我们在Controller中并没有使用if-else语句,而是使用策略模式来动态地选择不同的实现类。
阅读全文