策略模式

作者: 降龙_伏虎 | 来源:发表于2019-06-19 15:29 被阅读0次

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.策略模式用于同种对象间(例如直降/满减都属于促销);
  而状态模式用于处理 某一对象的不同状态间(例如订单状态:未付款/已支付/已取消 等)

相关文章

网友评论

    本文标题:策略模式

    本文链接:https://www.haomeiwen.com/subject/jrahqctx.html