美文网首页
策略模式

策略模式

作者: 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