策略设计模式(strategy):定义了一组算法,将每个算法都封装起来,并且使它们之间可以互换
个人理解有点像多态,如:支付,可以由微信支付,支付宝支付,现金支付。因此支付可以定义为一个接口,不同的支付方式都去实现这个支付接口,然后通过用户的选择,来确定执行哪一种支付方式
这种方式 扩展性良好, 还可以避免多重 if else 不易维护的问题
实现步骤:
①: 定义一个接口
②: 需要编写实现类 有不同的处理方式
③: 定义一个工厂factory
需要初始化所有的实现放到一个缓存(ConcurentHashMap)
在 @PostConstruct
④: 使用IoC容器管理
具体实现如下:
//支付接口
public interface Pay {
void pay();
}
//微信支付
public class WeChatPay implements Pay {
public void pay() {
//具体实现,设置type字段,用于区分为微信支付
}
}
//现金支付
public class CashPay implements Pay {
public void pay() {
//具体实现,设置type字段,用于区分为现金支付
}
}
//支付宝支付
public class AliPay implements Pay {
public void pay() {
//具体实现,设置type字段,用于区分为支付宝支付
}
}
此时可以通过工厂类来辅助实现
@Component
public class PayFactory {
//定义一个map,用于存储不同的支付实现类
private Map<Integer, IStrategyRank> map = new ConcurrentHashMap<>();
@Autowired
private WeChatPay weChatPay;
@Autowired
private CashPay cashPay;
@Autowired
private AliPay aliPay;
@PostConstruct //初始化时设置到map中
public void initPay() {
map.put(1,weChatPay); //key 为 type
map.put(2,cashPay);
map.put(3,aliPay);
}
//通过type,来选择对应的支付方式
public void selectPay(Integer type) {
return map.get(type).pay();
}
}
此时前端只需要向后端传入用户点击的type,后端便可以对应执行相应的操作。