美文网首页设计模式
设计模式之策略模式(Strategy)

设计模式之策略模式(Strategy)

作者: 从你说谎 | 来源:发表于2018-04-25 16:44 被阅读15次

    1. 什么是策略模式?

    策略模式 定义了算法族,分别封装起来, 让它们之间可以互相替换,此模式让算法的变化独立于使用算法的用户

    策略模式包含三个角色:
    1. Context(环境):持有一个Strategy的引用。
    2. Strategy(抽象策略):这是一个抽象角色,通常由一个接口或抽象类实现。定义了具体策略类所需实现的算法。
    3. ConcreteStrategy(具体策略):封装了具体的算法实现。

    2. 策略模式用来干什么?

    策略模式可以在运行时动态的改变算法,前提是用户需要知道所有的算法,然后进行选择。(用户只有选择权)

    3. 怎么实现策略模式?

    我们来用计算器来模拟一个策略模式的例子,不一定合适,主要就是那么个意思。

    首先我们定义一个计算器的类(Context),它持有一个计算的操作接口(Strategy),具体的加减乘除操作由子类(ConcreteStrategy)实现。

    package com.strategy;
    //计算器
    public class Calculator {
    
        private Calculation calculation;
    
        public Calculator(Calculation calculation) {
            this.calculation = calculation;
        }
    
        public Double execute(String numb1, String numb2) {
            return calculation.operation(Double.parseDouble(numb1), Double.parseDouble(numb2));
        }
    }
    

    package com.strategy;
    //操作
    public interface Calculation {
    
        Double operation(Double numb1, Double numb2);
    }
    

    package com.strategy;
    //加法操作
    public class Addition implements Calculation {
        @Override
        public Double operation(Double numb1, Double numb2) {
            return numb1 + numb1;
        }
    }
    

    package com.strategy;
    //减法操作
    public class Subtraction implements Calculation {
        @Override
        public Double operation(Double numb1, Double numb2) {
            return numb1 - numb2;
        }
    }
    

    package com.strategy;
    //乘法操作
    public class Multiplication implements Calculation {
        @Override
        public Double operation(Double numb1, Double numb2) {
            return numb1 * numb2;
        }
    }
    

    package com.strategy;
    //除法操作
    public class Division implements Calculation {
        @Override
        public Double operation(Double numb1, Double numb2) {
            return numb1 / numb2;
        }
    }
    
    测试:

    我们使用策略模式,封装了具体的算法,用户只用选择某种算法,而不需要知道具体的实现,而当需要新增或者修改算法时,也不会影响到原有的操作。

    我们可以举几个具体的场景来理解,比如说,现在的支付方式(微信,支付宝,银行卡),用户只能在提供的几种支付方式中选择一种。
    还有比如 以不同的格式保存文件、不同的算法压缩文件等等之类的都可以用策略模式来实现。

    相关文章

      网友评论

        本文标题:设计模式之策略模式(Strategy)

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