策略模式

定义

策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式

从定义中来看,策略模式的目标是优化类的行为选择,将选择行为和行为本身实现细节拆分,达到选择行为只控制流程,比如你要从A地到达B地,现在你有三种交通方式,汽车,自行车,火车。三种方式的耗时,路线选择都不一样。如果采取策略模式来描述这个场景,则选择何种交通方式就是在控制流程,而具体的流程细节是由单独的行为本身实现。

实例

public interface IntOpt {
    public int doOpt(int num, int num2);
}
public class Add implements IntOpt {
    @Override
    public int doOpt(int num, int num2) {
        return num + num2;
    }
}
public class Multiply implements IntOpt {
    @Override
    public int doOpt(int num, int num2) {
        return num * num2;
    }
}
public class IntOptContext {
    private IntOpt mIntOpt;

    public IntOptContext(IntOpt intOpt){
        this.mIntOpt = intOpt;
    }
    
    public int doOpt(int num, int nums){
        if (mIntOpt != null) {
            return mIntOpt.doOpt(num, nums);
        }
        return 0;
    }
}

上述接口描述了四则运算中的加法和乘法,IntOptContext属于策略的包装类,加上该类可以给当前框架充当中间层,以至于有改动的时候不用去修改客户端代码和策略实现,如果不用该包装,直接使用选择的策略类来操作也是可以的。如果是单个算法实现,也可以采用策略枚举

public enum  IntOptEnum {
    ADD("+"){
        @Override
        public int doOpt(int num, int nums) {
            return num + nums;
        }
    },

    SUB("-"){

        @Override
        public int doOpt(int num, int nums) {
            return num - nums;
        }
    };


    String symbol;

    private IntOptEnum(String symbol){
        this.symbol = symbol;
    }

    public String getSymbol(){
        return symbol;
    }

    public abstract int doOpt(int num, int nums);
}

总结

优点: 1、算法可以自由切换。 2、避免使用多重条件判断。 3、扩展性良好。

缺点: 1、策略类会增多。 2、所有策略类都需要对外暴露。

使用场景: 1、如果在一个系统里面有许多类,它们之间的区别仅在于它们的行为,那么使用策略模式可以动态地让一个对象在许多行为中选择一种行为。 2、一个系统需要动态地在几种算法中选择一种。 3、如果一个对象有很多的行为,如果不用恰当的模式,这些行为就只好使用多重的条件选择语句来实现。

注意事项:如果一个系统的策略多于四个,就需要考虑使用混合模式,解决策略类膨胀的问题。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 二十三种设计模式 - 策略模式 策略模式简介 模式动机 完成一项任务,往往可以有多种不同的方式,每一种方式称为一个...
    JustTheSame阅读 1,903评论 2 16
  • 【学习难度:★☆☆☆☆,使用频率:★★★★☆】直接出处:策略模式梳理和学习:https://github.com/...
    BruceOuyang阅读 1,633评论 3 5
  • 1.初识策略模式 定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。本模式使得算法可独立于使用它的客户...
    王侦阅读 1,545评论 0 3
  • 目录 本文的结构如下: 引言 什么是策略模式 模式的结构 典型代码 代码示例 策略模式和模板方法模式的区别 优点和...
    w1992wishes阅读 960评论 1 7
  • 设计模式 1 什么是策略模式 在策略模式中,定义了一些独立的类来封装不同的算法,每一个类封装一种具体的算法,在这里...
    凯玲之恋阅读 1,352评论 0 3

友情链接更多精彩内容