1.概念
策略模式(Strategy Pattern) 面向抽象编程思维的具体体现(定义接口)
根据不通的策略定义不通的实现类,从而实现不通策略下的不同实现.
2.优点
代码耦合小,相互之间不影响,不会因为某个策略的修改而影响其他策略
利于扩展
3.缺点
代码结构复杂,不太利于理解
4.实际使用过程中需要注意的
使用策略模式时,需注意不同策略见的重复代码.
策略实现要剥离'变化'抽取'公共'
公共部分逻辑可以考虑抽象类存放
5.适用场景
支付方式
促销引擎
...
6.demo
image.png
/**
* Description:促销接口
*
* @date 2019-06-19 15:03
*/
public interface IPromo extends Serializable {
/**
*获取促销ID
**/
Long getPromoId();
/**
*获取促销名称
**/
String getPromoName();
/**
*获取促销价格
**/
BigDecimal getMoney();
}
/**
* Description:直降
*
* @author zhangzhongbo
* @date 2019-06-19 15:08
*/
public class Down implements IPromo{
@Override
public Long getPromoId() {
return 1L;
}
@Override
public String getPromoName() {
return "直降";
}
@Override
public BigDecimal getMoney() {
return BigDecimal.ONE;
}
}
/**
* Description:满减
*
* @date 2019-06-19 15:11
*/
public class FullReduction implements IPromo{
@Override
public Long getPromoId() {
return 2L;
}
@Override
public String getPromoName() {
return "满减";
}
@Override
public BigDecimal getMoney() {
return BigDecimal.TEN;
}
}
/**
* Description:促销处理器
*
* @date 2019-06-19 15:15
*/
public interface IPromoHandler {
void execute(IPromo promo);
}
/**
* Description:直降处理器
*
* @date 2019-06-19 15:16
*/
public class DownHandler implements IPromoHandler{
@Override
public void execute(IPromo promo) {
//TODO 直降独有处理逻辑 ...
System.out.println("处理直降独有处理逻辑 ......");
}
}
/**
* Description:满减处理器
*
* @date 2019-06-19 15:18
*/
public class FullReductionHandler implements IPromoHandler{
@Override
public void execute(IPromo promo) {
//TODO 处理满减业务逻辑...
System.out.println("处理满减业务逻辑...");
}
}
7.与状态模式的区别
a.策略模式注重的是过程;状态模式注重的是结果
b.策略模式用于同种对象间(例如直降/满减都属于促销);
而状态模式用于处理 某一对象的不同状态间(例如订单状态:未付款/已支付/已取消 等)
网友评论