策略模式

前言

使用模板方法模式,能够进行共有方法的抽取,快速复用和扩展。策略模式也是一种行为型模式,作用和模板方法模式一样。大家对 if-else 嵌套过多的处理方法,最常见的手段就是利用策略模式。

目录

一、定义

定义一组算法,将每个算法都封装起来,并且使它们之间可以互换

二、模式原理分析

//抽象的策略角色
public interface Strategy{
    //策略模式的运算规则
    public void doSomething();
}
//具体的策略角色
public class ConcreteStrategy1 implements Strategy{
    public void doSomething(){
        System.out.println("具体策略1的规则");
    }
}
public class ConcreteStrategy2 implements Strategy{
    public void doSomething(){
        System.out.println("具体策略2的规则");
    }
}
//封装角色
public class Context{
    //抽象策略
    private Strategy strategy = null;
    //构造函数设置具体策略
    public Context(Strategy _strategy){
        this.strategy = _strategy;
    }
    public void doAnyThing(){
        this.strategy.doSomething();
    }
}
复制代码

高层的模块调用很简单,需要知道使用哪个策略,构建出它的对象

public class Client{
    public static void main(String[] args){
        //声明一个具体策略
        Strategy strategy = new ConcreteStrategy1();
        Context context = new Context(strategy);
        //执行
        context.doAnyThing();
    }
}
复制代码

三、使用场景

  • 只希望客户端选择已经封装好的算法场景而不用关心算法实现细节

  • 多个类只有在算法或行为上稍有不同的场景

  • 算法需要自由切换的场景

  • 需要屏蔽算法规则的场景

  • 分离使用策略和创建策略的场景

四、优点

  • 算法可以自由切换

  • 避免使用多重条件判断

  • 扩展性好

五、缺点

  • 策略类数量增多,复用可能性小

  • 所有的策略类需要对外暴露

  • 修改代码时,需要了解每个策略类,对使用场景进行修改

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享