策略模式:Strategy
前言:
策略模式定义一系列的算法,这些算法可以互相替换,同一时间只会执行一种策略。
故事:
五一放假了,如果下雨就打算宅家里看书;如果阴天就去打球;如果晴天就去旅游
类图:
伪代码:
/**
* 抽象的策略
**/
public interface HolidayStrategy {
void doPlan();
}
public class SunPlan implements HolidayStrategy {
@Override
public void doPlan() {
System.out.println("晴天去旅游!");
}
}
public class CloudPlan implements HolidayStrategy {
@Override
public void doPlan() {
System.out.println("阴天去打球");
}
}
public class RainPlan implements HolidayStrategy {
@Override
public void doPlan() {
System.out.println("下雨天,宅家里看书!");
}
}
/**
* 上下文,执行具体的策略方法。这里可以使用单例模式
**/
public class Context {
private HolidayStrategy holidayStrategy;
public Context(HolidayStrategy holidayStrategy) {
this.holidayStrategy = holidayStrategy;
}
public void doPlan(){
holidayStrategy.doPlan();
}
}
思考:
策略模式可能平时编码的时候就有用到,service层有多个实现类的时候,我们会根据不同的条件去选择不同的实现方法。但是我们大部分时间都省略了上下文Context类