12.策略模式
策略模式其实是把相似的且容易重复出现的方法,一个一个封装成类,然后用哪个就调用哪个类。
看个例子。
public interface Travel {
void travel();
}
public class ByCar implements Travel{
@Override
public void travel() {
System.out.println("乘车前进");
}
}
public class ByFly implements Travel{
@Override
public void travel() {
System.out.println("坐飞机前进");
}
}
import java.util.ArrayList;
import java.util.List;
public class Client {
private List<Travel> travelList = new ArrayList<>();
public void addTravle(Travel travel){
travelList.add(travel);
}
public void init(){
travelList.add(new ByCar());
travelList.add(new ByFly());
travelList.add(new ByCar());
travelList.add(new ByFly());
}
public void letGo(){
for(Travel travel : travelList){
travel.travel();
}
}
public static void main(String[] args) {
Client client = new Client();
client.init();
client.letGo();
}
}
因为乘飞机,坐小汽车都是赶路,行为类似。所以定义一个Travel接口。
用到哪个交通工具,就new 哪个交通工具的对象,最后调用他封装的方法。
比起模板模式,面对这种执行方法的数量及顺序都不定的情况下,策略模式更灵活,代码更少,耦合更小。