美文网首页
设计模式 | 行为型模式 | 策略模式

设计模式 | 行为型模式 | 策略模式

作者: 暴走的朝天椒 | 来源:发表于2021-03-07 23:28 被阅读0次

    什么是策略模式?

    例如:公司针对普通客户、老客户、大客户 等等都有不同的报价,如何能让报价算法,很容易地实现可维护、可扩展,又能动态地切换变化,而不影响到使用算法的客户呢?

    用来解决上述问题的一个合理的解决方案就是策略模式。那什么是策略模式呢?

    定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换,此模式让算法的变化,不会影响到使用算法的客户。

    策略模式的作用

    策略模式的作用是把具体的算法实现从具体的业务处理中独立出来,把它们实现成单独的算法类,从而形成一系列的算法,并让这些算法可以互相替换。

    策略模式的核心不是如何来实现算法,而是如何组织、调用这些算法,从而让程序结构更灵活,具有更好的维护性和扩展性。

    策略模式的结构和说明

    策略模式的结构.png
    • Context:负责和具体的策略类交互。
    • Strategy:策略接口,定义所有算法的公共接口。
    • ConcreteStrategy:具体的策略类实现。

    策略模式调用顺序示意图

    策略模式调用顺序示意图.png

    策略模式的示例代码

    /**
     * 定义策略算法的接口
     */
    public interface Strategy {
        /**
         * 算法方法
         */
        public void algorithmInterface();
    }
    
    /**
     * 算法A
     */
    public class ConcreteStrategyA implements Strategy{
        @Override
        public void algorithmInterface() {
            // 具体的算法实现
        }
    }
    
    /**
     * 算法B
     */
    public class ConcreteStrategyB implements Strategy{
        @Override
        public void algorithmInterface() {
            // 具体的算法实现
        }
    }
    
    /**
     * 算法C
     */
    public class ConcreteStrategyC implements Strategy{
        @Override
        public void algorithmInterface() {
            // 具体的算法实现
        }
    }
    
    /**
     * 上下文对象,通常会持有一个具体的策略类
     */
    public class Context {
        /**
         * 持有一个具体的策略对象
         */
        private Strategy strategy;
    
        /**
         * 通过构造方法,传入一个具体的策略对象
         * @param strategy
         */
        public Context(Strategy strategy){
            this.strategy = strategy;
        }
    
        /**
         * 调用具体策略的算法运算
         */
        public void contextInterface(){
            strategy.algorithmInterface();
        }
    }
    

    相关文章

      网友评论

          本文标题:设计模式 | 行为型模式 | 策略模式

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