策略模式

策略模式定义了一系列的算法,并将每一个算法封装起来,而且使他们还可以互相替换.策略模式让算法独立于使用它的客户而独立变化.

使用场景
1.针对同一类型问题的多种处理方式,仅仅具体行为有差别时.
2.一个系统需要动态地在几种算法中选择一种。
3.如果一个对象有很多的行为,而又需要使用if-else 或者 switch-case 来选择具体子类时,如果不用恰当的模式,这些行为就只好使用多重的条件选择语句来实现。

优点:
1.算法可以自由切换
2.避免使用多重条件判断
3.耦合度较低,扩展性良好

缺点:
1.随着策略增多,子类也会变得繁多。
2.所有策略类都需要对外暴露

package 策略模式;

public class PriceCaculator {
	public static final int BUS = 1;

	public static final int SUBWAY = 2;

	public static void main(String[] args) {
		PriceCaculator caculator = new PriceCaculator();
		System.out.println("坐16公里的公交车票价为:"+caculator.caculatePrice(16, BUS));
		System.out.println("坐16公里的地铁票价为:"+caculator.caculatePrice(16, SUBWAY));
	}

	private int busPrice(int km) {
		int extraTotal = km - 10;

		int extraFactor = extraTotal / 5;

		int fractor = extraTotal % 5;

		int price = 1 + extraFactor * 1;

		return fractor > 0 ? ++price : price;
	}

	private int subwayPrice(int km) {
		if (km <= 6) {
			return 3;
		} else if (km > 6 && km <= 12) {
			return 4;
		} else if (km > 12 && km <= 22) {
			return 5;
		} else if (km > 22 && km <= 32) {
			return 6;
		}
		return 7;
	}
	
	private int caculatePrice(int km,int type) {
		if(type == BUS) {
			return busPrice(km);
		}else if(type == SUBWAY) {
			return subwayPrice(km);
		}
		return 0;
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值