美文网首页
策略模式

策略模式

作者: shiguangfeixu | 来源:发表于2019-07-28 20:32 被阅读0次

基本定义

定义一系列算法,把他们封装起来,并且他们可以互相替换,可以独立于使用它的客户端而变换。该模式的核心就是将经常需要变化的类抽离出来,将每一种可能的变化对应的交给抽象类或接口的子类去实现。

基本概念

策略:封装算法标识的接口是策略
具体策略:实现接口的策略是具体策略
上下文:依赖于策略接口的类


策略模式

代码设计

设计一个计算成绩的接口

public interface ComputableStrategy {
    double computer(double[] a);
}

代码采用了很多种计算成绩的方法,表示不同的策略
这里只列举一个策略一

public class StrategyOne implements ComputableStrategy{
    @Override
    public double computer(double[] a) {
        double score = 0, sum = 0;
        for(int i=0;i<a.length;i++){
            sum+=a[i];
        }
        score = sum/a.length;
        return score;
    }
}

context根据传入的策略选择合适的计算方法

public class GymnasticsContext {
    ComputableStrategy strategy;
    public void setStrategy(ComputableStrategy strategy){
        this.strategy = strategy;
    }
    public double getPersonScore(double[] a){
        if(strategy !=null){
            return strategy.computer(a);
        }else{
            return 0;
        }
    }
}

具体使用

public class Application {
    public static void main(String[] args) {
        GymnasticsContext context = new GymnasticsContext();
        context.setStrategy(new StrategyOne());
        double[] a = {1,2,3,4,5,6,7,8};
        context.getPersonScore(a);
    }
}

优缺点分析

  • 策略模式满足开闭原则
  • 上下文和具体策略是松耦合的关系
  • 一个算法可以有不同的遍体,不需要暴露出复杂的细节
  • 少用继承,多用组合

完整源码

策略模式代码

相关文章

网友评论

      本文标题:策略模式

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