策略模式

作者: 降龙_伏虎 | 来源:发表于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