策略模式可以在运行时动态切换类的运行算法策略,将变化的算法策略封装,降低了代码耦合度,只需要根据不同情况更换不同策略即可。
例如:今天是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();
}
}