策略模式

2019-07-28  本文已影响0人  shiguangfeixu

基本定义

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

基本概念

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


策略模式

代码设计

设计一个计算成绩的接口

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);
    }
}

优缺点分析

完整源码

策略模式代码

上一篇 下一篇

猜你喜欢

热点阅读