Strategy: [ˈstrætədʒi] ::策略;计策;行动计划;策划;规划;部署;统筹安排;战略;战略部署
参与角色:
- 策略类的抽象基类(也可以是接口)拥有不同策略类的共有方法
- 各种策略实现类
- Context类(持有策略基类的对象,可以动态随着策略对象的改变而改变行为)
优点: - 算法可以自由切换。
- 避免使用多重条件判断。
- 扩展性良好。
缺点:
- 策略类会增多。
- 所有策略类都需要对外暴露。
实现
// 商品id, 支付类型
public ResultData makeOrder(Long goodsId,String type){
Order order = this.orderService.makeOrder(goodsId); // 生成本地的订单
PayType payType = PayType.getByCode(type);//选择支付方式
payType.get().pay(order.getId(),order.getAmount());//进行支付
return this.ok();
}
public enum PayType {
//支付宝 AliPay 是实现类
ALI_PAY("1",new AliPay()),
//微信
WECHAT_PAY("2",new WechatPay());
private String payType;
// 这是一个接口
private Payment payment;
PayType(String payType,Payment payment){
this.payment = payment;
this.payType = payType;
}
//通过get方法获取支付方式
public Payment get(){ return this.payment;}
public static PayType getByCode(String payType) {
for (PayType e : PayType.values()) {
if (e.payType.equals(payType)) {
return e;
}
}
return null;
}
}
策略模式和桥接模式的区别
- 策略模式和桥接模式经过学习发现,都是将一个事物的抽象和它的实现分离开来,使其两者具有一定的独立扩展的可能性,但是两者有什么区别呢?
- 桥接模式强调接口仅提供基本操作,而这些基本操作定义更高层次的操作,内部可以独立扩展,可不属于一个整体;策略模式强调抽象接口提供的是一种算法,Context简单调用这些算法完成操作;
- 桥接模式通过继承、聚合的方式组合类和对象形成更大的结构;而策略模式则通过接口之间的协作完成不同功能的组合,是一种行为模式(重点理解)
- 桥接模式要表达的内容比较多,结构也比较复杂,其实是接口隔离的原则,本质上把布局类的两种体系区别开来,使得他们可以松散的组合,而策略模式在解耦只是某一个算法级别的层次。客观上讲:策略模式只是桥接模式的 一部分;
网友评论