策略就是基于不同的情况使用不同的处理方式,譬如生活场景中,我们去超市买东西,收营员会问,你是要大购物袋、中型购物袋、还是小型购物袋。而你判断的依据就是购买东西的多少决定使用什么样的购物袋。以及在战争中基于不同的对手,使用不同的战争策略进行作战等。这种模式在生活中非常的常见。
上代码
购物袋模板
public interface ShoppingBagTemplate {
String getShoopingBagSize();
default void getWeight(int weight) {
System.out.print("购物重: "+ weight+" 斤,需要: ");
}
}
具体策略:、
public class LargeShoppingBag implements ShoppingBagTemplate {
@Override
public String getShoopingBagSize() {
return "大购物袋装可装30斤以内的物品";
}
}
public class MediumShoppingBag implements ShoppingBagTemplate {
@Override
public String getShoopingBagSize() {
return "中型购物袋可装15斤以下的物品";
}
}
public class SmallShoppingBag implements ShoppingBagTemplate {
@Override
public String getShoopingBagSize() {
return "小型购物袋可装5斤以下的物品";
}
}
测试使用
public class StrategyRoute {
private List<Route> routes = null;
public StrategyRoute() {
routes = new ArrayList();
routes.add(new Route(5,0,new SmallShoppingBag()));
routes.add(new Route(15,0,new MediumShoppingBag()));
routes.add(new Route(13,0,new LargeShoppingBag()));
}
public ShoppingBagTemplate execute(int weight) {
int i = 0;
for(i = 0; i < routes.size() ; i++) {
if(routes.get(i).getMaxSize() >= weight) {
break;
}
}
return routes.get(i >= routes.size() ? i-=1 : i).getShoppingBag(weight);
}
class Route{
private int maxSize ;
private int minSize;
private ShoppingBagTemplate shoppingBagTemplate;
public Route(int maxSize,int minSize,ShoppingBagTemplate shoppingBagTemplate) {
this.maxSize = maxSize;
this.minSize = minSize;
this.shoppingBagTemplate = shoppingBagTemplate;
}
public int getMaxSize() {
return maxSize;
}
ShoppingBagTemplate getShoppingBag(int weight) {
shoppingBagTemplate.getWeight(weight);
return shoppingBagTemplate;
}
}
}
测试:
public static void main(String[] args) {
StrategyRoute strategyRoute = new StrategyRoute();
System.out.println( strategyRoute.execute(4).getShoopingBagSize());
System.out.println( strategyRoute.execute(10).getShoopingBagSize());
System.out.println( strategyRoute.execute(25).getShoopingBagSize());
}
购物重: 4 斤,需要: 小型购物袋可装5斤以下的物品
购物重: 10 斤,需要: 中型购物袋可装15斤以下的物品购物重: 25 斤,需要: 大购物袋装可装30斤以内的物品
策略模式的有点很明显,减少了耦合,只知道一个内,并不知道是哪个具体实现。特别是在较多条件语句中使用。而 策略模式 也是在各种开源框架中使用最多的一种框架