设计模式-策略模式(Strategy pattern)

策略就是基于不同的情况使用不同的处理方式,譬如生活场景中,我们去超市买东西,收营员会问,你是要大购物袋、中型购物袋、还是小型购物袋。而你判断的依据就是购买东西的多少决定使用什么样的购物袋。以及在战争中基于不同的对手,使用不同的战争策略进行作战等。这种模式在生活中非常的常见。

上代码

购物袋模板

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斤以内的物品

策略模式的有点很明显,减少了耦合,只知道一个内,并不知道是哪个具体实现。特别是在较多条件语句中使用。而 策略模式 也是在各种开源框架中使用最多的一种框架

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

树懒_Zz

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值