策略模式可以在运行时动态切换类的运行算法策略,将变化的算法策略封装,降低了代码耦合度,只需要根据不同情况更换不同策略即可。
例如:今天是2020-12-24平安夜,今晚去见女票,可以选择送花,也可以选择送苹果,平安夜就是算法使用环境,送花和送苹果就是不同的算法策略。
public class ChristmasContext {
    private ChristmasStrategy christmasStrategy;
    public ChristmasContext(ChristmasStrategy christmasStrategy){
        this.christmasStrategy = christmasStrategy;
    }
    public void gift(){
        christmasStrategy.gift();
    }
}
public interface ChristmasStrategy {
    public void gift();
}
public class FlowerStrategy implements ChristmasStrategy{
    @Override
    public void gift() {
        System.out.println("送花");
    }
}
public class AppleStrategy implements ChristmasStrategy{
    @Override
    public void gift() {
        System.out.println("送苹果");
    }
}
public class TestStrategy {
    public static void main(String[] args){
        ChristmasContext christmasContext = new ChristmasContext(new FlowerStrategy());
        christmasContext.gift();
        christmasContext = new ChristmasContext(new AppleStrategy());
        christmasContext.gift();
    }
}