金三银四火热中,现在程序员门槛越来越高了。。。。
相信大家也在面试中不断被问设计模式这块。要是两年前还能忽悠过去说自己只会个单例、工厂、代理等,现如今还真忽悠不过去,下面说说策略模式
什么是策略模式?
概念:对象的某个行为,在不同场景中有不同的实现方式,这样就可以将这些实现方式定义成一组策略,每个实现类对应一个策略,在不同的场景就使用不同的实现类,并且可以自由切换策略。
白话:就是请求参数的不同去实现不同的逻辑,从而达到减少if/else的使用,说实话看多了这种满屏的if/else的话确实很难受。。。。
实战一波
以支付伪代码为例
1、先定义接口做约束
public interface InfPay {
String Pay(OrderData orderData);
}
2、实体参数的定义
@Data
public class OrderData {
private int orderId;
private String orderType;
private String orderContent;
}
3、对应的实现类
@Service(value = "wechatpay")
public class WeChatPay implements InfPay {
@Override
public String Pay(OrderData orderData) {
return "微信"+"《"+orderData.getOrderContent()+"》"+"支付成功";
}
}
@Service(value = "alipay")
public class AliPay implements InfPay {
@Override
public String Pay(OrderData orderData) {
return "支付宝"+"《"+orderData.getOrderContent()+"》"+"支付成功";
}
}
4、对外接口
@RestController
public class PayController {
@Autowired
private ApplicationContext applicationContext;
@RequestMapping("/pay")
public String pay(@RequestBody OrderData orderData){
//spring获取bean的方式有很多种,自由切换
InfPay bean = applicationContext.getBean(orderData.getOrderType(), InfPay.class);
String paymessage = bean.Pay(orderData);
return paymessage;
}
}
小结:1、几乎是白话文讲出了策略模式,小白可以拿去吹牛逼了。。。。
2、结尾我想问问大神:策略模式跟工厂模式区别在哪里?求知