java controller getMapping 使用策略模式代替if-else返回页面并携带model参数,每个页面获取不同参数放到model中
时间: 2023-05-20 22:06:18 浏览: 79
答案:
可以使用策略模式来代替 if-else 返回页面并携带 model 参数。具体实现方式是,定义一个接口,例如 PageStrategy,其中包含一个方法 getPageName(),用于返回页面名称,以及一个方法 getModel(),用于返回页面需要的 model 参数。然后,针对每个页面,实现一个具体的 PageStrategy 类,实现 getPageName() 和 getModel() 方法。在 Controller 中,通过依赖注入的方式,获取对应的 PageStrategy 实例,调用其 getPageName() 方法获取页面名称,调用 getModel() 方法获取页面需要的 model 参数,最后返回页面即可。这样做的好处是,可以避免 if-else 嵌套过深,代码更加清晰易懂,也方便扩展和维护。
相关问题
java controller getMapping 使用策略模式代替if-else返回页面并携带model参数
可以使用策略模式来代替if-else语句,实现更加灵活的页面返回和model参数携带。具体实现可以参考以下代码:
1. 定义一个接口,用于实现不同的策略:
```
public interface PageStrategy {
String getPage(Model model);
}
```
2. 实现不同的策略类:
```
public class HomePageStrategy implements PageStrategy {
@Override
public String getPage(Model model) {
// 返回首页页面
return "home";
}
}
public class AboutPageStrategy implements PageStrategy {
@Override
public String getPage(Model model) {
// 返回关于页面
return "about";
}
}
// 其它策略类...
```
3. 在Controller中使用策略模式:
```
@Controller
public class MyController {
private Map<String, PageStrategy> strategyMap = new HashMap<>();
public MyController() {
// 初始化策略Map
strategyMap.put("home", new HomePageStrategy());
strategyMap.put("about", new AboutPageStrategy());
// 其它策略...
}
@GetMapping("/{page}")
public String getPage(@PathVariable String page, Model model) {
// 根据页面名称获取对应的策略
PageStrategy strategy = strategyMap.get(page);
if (strategy == null) {
// 如果没有对应的策略,返回错误页面
return "error";
}
// 调用策略的getPage方法,返回对应的页面
return strategy.getPage(model);
}
}
```
这样,就可以通过不同的策略来返回不同的页面,并且可以携带不同的model参数。
java controller getMapping 使用策略模式代替if-else根据手机号获取不同参数返回页面并携带model参数
可以使用策略模式来代替if-else,将不同的获取参数的逻辑封装在不同的策略类中,然后在controller中根据手机号选择对应的策略类来获取参数并返回页面。同时,可以将需要携带的model参数作为参数传递给策略类,让策略类进行处理并返回处理后的结果。以下是示例代码:
```
// 定义策略接口
public interface ParamStrategy {
Map<String, Object> getParams(String phone, Map<String, Object> model);
}
// 定义不同的策略类
public class ParamStrategyA implements ParamStrategy {
@Override
public Map<String, Object> getParams(String phone, Map<String, Object> model) {
// 根据手机号获取参数A
Map<String, Object> params = new HashMap<>();
params.put("paramA", "valueA");
// 处理model参数
model.put("keyA", "valueA");
return params;
}
}
public class ParamStrategyB implements ParamStrategy {
@Override
public Map<String, Object> getParams(String phone, Map<String, Object> model) {
// 根据手机号获取参数B
Map<String, Object> params = new HashMap<>();
params.put("paramB", "valueB");
// 处理model参数
model.put("keyB", "valueB");
return params;
}
}
// 在controller中使用策略模式获取参数并返回页面
@Controller
public class MyController {
private Map<String, ParamStrategy> strategyMap = new HashMap<>();
public MyController() {
// 初始化策略映射
strategyMap.put("phoneA", new ParamStrategyA());
strategyMap.put("phoneB", new ParamStrategyB());
}
@GetMapping("/getParams")
public String getParams(@RequestParam("phone") String phone, Model model) {
// 根据手机号选择对应的策略类
ParamStrategy strategy = strategyMap.get(phone);
if (strategy == null) {
throw new IllegalArgumentException("Invalid phone number");
}
// 获取参数并处理model参数
Map<String, Object> params = strategy.getParams(phone, model.asMap());
// 将参数添加到model中
model.addAllAttributes(params);
// 返回页面
return "myPage";
}
}
```
注意:以上代码仅为示例,实际使用时需要根据具体情况进行修改和优化。