什么是策略模式
策略模式指的是将策略(完成特定行为的方法)从主业务逻辑中抽离出来的思想。比如一个人早上起床上学的过程,首先刷牙洗脸,然后吃饭,前往学校,到校后上课。前往学校的过程就是一种可以从主业务逻辑中抽离出来的策略。我们既可以选择走路上学,也可以骑单车、父母接送或搭乘网约车,如果不使用策略模式,则主业务逻辑将臃肿不堪,且不利于实现拓展。如果我们将前往学校的行为策略抽象出来作为接口,用不同的策略实现类去实现这个接口,在具体业务逻辑中根据需要选择具体的策略实现类,这样便很好地实现了策略和主业务逻辑地解耦。
下面就以上学为例实现
通勤策略接口
public interface TravelStrategy {
void goToSchool();
}
实现单车策略
public class BikeStrategy implements TravelStrategy {
@Override
public void goToSchool() {
System.out.println("骑单车上学");
}
}
实现走路策略
public class OnfootStrategy implements TravelStrategy{
@Override
public void goToSchool() {
System.out.println("走路上学");
}
}
实现父母接送策略
public class ParentStrategy implements TravelStrategy{
@Override
public void goToSchool() {
System.out.println("父母送去学校");
}
}
策略启动类
public class GoToSchool {
TravelStrategy travelStrategy;
public GoToSchool(TravelStrategy travelStrategy){
this.travelStrategy=travelStrategy;
}
public void go(){
travelStrategy.goToSchool();
}
}
主方法
public class Test {
public static void main(String args[]){
GoToSchool goToSchool=new GoToSchool(new OnfootStrategy());
goToSchool.go();
}
}
运行结果
骑单车上学
如上所示,当改变通勤策略时只需要改变策略启动类对象的构造方法中传进去的策略实现类对象。如改变为骑单车上学。
public class Test {
public static void main(String args[]){
//GoToSchool goToSchool=new GoToSchool(new OnfootStrategy());
GoToSchool goToSchool=new GoToSchool(new BikeStrategy());
goToSchool.go();
}
}
运行结果
走路上学