java mvc框架 controller getMapping 使用策略模式代替if-else根据手机号调用其他实现类查询不同信息添加到model中返回不同页面,写一个例子
时间: 2023-05-21 11:04:16 浏览: 63
可以使用策略模式来优化这个过程,可以将不同的查询实现类分别封装成不同的策略类。这样,在controller中调用不同的策略类即可完成不同信息的查询和返回不同页面的操作。
下面是一个使用策略模式的 Java MVC 框架 Controller 的示例代码:
```java
@Controller
public class UserController {
private final Map<String, UserQueryStrategy> queryStrategies = new HashMap<>();
@Autowired
public UserController(List<UserQueryStrategy> queryStrategyList){
for(UserQueryStrategy queryStrategy : queryStrategyList){
queryStrategies.put(queryStrategy.getType(), queryStrategy);
}
}
@RequestMapping(value = "/user/{phoneNumber}")
public String getUserInfo(@PathVariable("phoneNumber") String phoneNumber, Model model){
UserQueryStrategy queryStrategy = queryStrategies.get(getPhoneType(phoneNumber));
User user = queryStrategy.getUser(phoneNumber);
model.addAttribute("user", user);
String page = queryStrategy.getPage();
return page;
}
private String getPhoneType(String phone){
// 根据手机号码解析出运营商类型
// ...
return phoneType;
}
}
```
上面代码中,UserController 中注入了一个 UserQueryStrategy 接口的 List,这个 List 中保存了所有的 UserQueryStrategy 实现类,即各个查询策略类。在 getUserInfo 方法中,根据手机号获取其运营商类型,再从 queryStrategies 中获取对应的策略类实例,调用其 getUser 方法获取用户信息,并将结果添加到 Model 中,最后返回对应的页面。
这样,就可以使用策略模式代替 if-else,让代码更加清晰、简洁、易于维护。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![md](https://img-home.csdnimg.cn/images/20210720083646.png)