java mvc controller getMapping 使用策略模式代替if-else根据手机号获取不同参数返回不同页面并携带model参数
时间: 2023-05-23 14:02:15 浏览: 72
可以使用策略模式来代替if-else,将每个不同的情况生成一个独立的策略类,并将这些策略类封装在Controller类中。每个策略类都实现了一个公共接口,该接口定义了必要的方法以完成该策略所需的逻辑。在Controller的getMapping方法中,根据手机号选择不同的策略类,然后调用该策略类的方法进行处理并返回模型参数和页面。
相关问题
java mvc controller getMapping 使用策略模式代替if-else根据手机号获取不同参数返回页面并携带model参数
可以使用策略模式来代替 if-else 分支语句。具体实现方法是定义一个接口和多个实现类,每个实现类对应一个手机号码,并实现具体的业务逻辑。然后在 Controller 中通过 Spring 的 @Autowired 注解注入所有实现类,根据用户输入的手机号码,调用对应的实现类来处理请求,最终将计算得到的结果封装在 Model 中返回给页面。示例代码如下:
```
// 定义策略接口
public interface PhoneNumberStrategy {
void process(String phoneNumber, Model model);
}
// 实现具体的策略类
@Service("139PhoneNumberStrategy")
public class PhoneNumber139Strategy implements PhoneNumberStrategy {
@Override
public void process(String phoneNumber, Model model) {
// TODO: 根据手机号码139处理请求,并将计算结果放入Model中
}
}
@Service("188PhoneNumberStrategy")
public class PhoneNumber188Strategy implements PhoneNumberStrategy {
@Override
public void process(String phoneNumber, Model model) {
// TODO: 根据手机号码188处理请求,并将计算结果放入Model中
}
}
// Controller 中注入所有策略类,并通过手机号码调用对应的策略类中的处理逻辑
@Controller
public class MyController {
@Autowired
private List<PhoneNumberStrategy> phoneNumberStrategies;
@GetMapping("/{phoneNumber}")
public String handleRequest(@PathVariable String phoneNumber, Model model) {
for (PhoneNumberStrategy strategy : phoneNumberStrategies) {
if (strategy.isMatch(phoneNumber)) {
strategy.process(phoneNumber, model);
break;
}
}
return "result";
}
}
```
注意:以上示例代码仅为参考,具体实现方式还需要根据具体业务逻辑进行适当修改和完善。
java mvc框架 controller getMapping 使用策略模式代替if-else根据手机号和不同实现类查询不同信息添加到model中返回不同页面,写一个例子
当然可以,以下是一个例子:
```java
// 定义一个接口,不同实现类实现不同的业务逻辑
public interface UserInfoQuery {
void query(String phoneNumber, Model model);
}
// 对于 Controller 通过策略模式调用不同实现类来完成更具体的业务逻辑
public class UserController {
private Map<Integer, UserInfoQuery> strategyMap = new HashMap<>();
public UserController() {
strategyMap.put(1, new OnlineUserInfoQuery());
strategyMap.put(2, new OfflineUserInfoQuery());
}
@GetMapping("/user/{id}/{phone}")
public String getUserInfo(@PathVariable Integer id, @PathVariable String phone, Model model) {
UserInfoQuery query = strategyMap.get(id);
if (query == null) {
throw new IllegalArgumentException("Unsupported user type!");
}
query.query(phone, model);
return "user-profile/" + id;
}
}
// OnlineUserInfoQuery 实现了 UserInfoQuery 接口
public class OnlineUserInfoQuery implements UserInfoQuery {
@Override
public void query(String phoneNumber, Model model) {
// 通过手机号查询线上用户信息
User user = userService.queryByPhone(phoneNumber);
model.addAttribute("user", user);
}
}
// OfflineUserInfoQuery 实现了 UserInfoQuery 接口
public class OfflineUserInfoQuery implements UserInfoQuery {
@Override
public void query(String phoneNumber, Model model) {
// 通过手机号查询线下用户信息
Customer customer = customerService.getByPhoneNum(phoneNumber);
model.addAttribute("customer", customer);
}
}
```
以上就是一个简单的Java MVC框架的例子,使用了策略模式来代替if-else语句,根据手机号和不同实现类查询不同信息添加到Model中返回不同页面。
阅读全文