JAVA 23种设计模式之行为型模式—策略模式(13)

JAVA 23种设计模式之行为型模式—策略模式

策略模式,又叫算法簇模式,就是定义了不同的算法族,并且之间可以互相替换,此模式让算法的变化独立于使用算法的客户。策略模式的好处在于你可以动态的改变对象的行为。

生活中关于策略模式的例子很多

比如会员打折卡:vip会员卡7折,普通会员卡9折,不是会员不是打折。

这里我们就要定义三种计算方式来实现不同的会员打折

首先我们定义一个接口,这个接口是每个会员都有的

public interface IStrategy {
	/*
	 * 会员级别
	 * vip会员 7折
	 *  普通会员 9折
	 *  不是会员 不打折
	 */
	public int level();

}
然后再写分别实现vip会员,普通会员,以及不是会员

public class vipMember implements IStrategy {

	@Override
	public int level() {
		System.out.println("当前是vip用户,打折是7折");
		return 7;

	}

}

public class member implements IStrategy {

	@Override
	public int level() {
		System.out.println("当前是普通会员,打折是9折");
		return 9;

	}

}

public class nomember implements IStrategy {

	@Override
	public int level() {
		System.out.println("当前不是会员,不打折");
		return 10;

	}

}
然后我们再定义一个获得具体策略的类

public class FStrategy {
	private IStrategy strategy;
	
	@SuppressWarnings("unused")
	private int level;
	private int price;
	
	public FStrategy(IStrategy strategy,int price){
		this.level = strategy.level();
		this.price = price;
	}

	public void calculation(){
		System.out.println("您的最终优惠价格是: "+(double)this.level*this.price/10+" 元");
	}
}
然后我们就可以写一个测试类来看看效果了

public class demo {

	public static void main(String[] args) {
		FStrategy fs;
		
		// 试试vip用户
		fs = new FStrategy(new vipMember(),98);
		fs.calculation();

		System.out.println("~~~~~~~~~~~~~~~~~~");
		
		// 试试普通会员
		fs = new FStrategy(new member(),98);
		fs.calculation();
		
		System.out.println("~~~~~~~~~~~~~~~~~~");
		
		// 试试不是会员
		fs = new FStrategy(new nomember(),98);
		fs.calculation();
	}

}
最后打印出的结果如下:

当前是vip用户,打折是7折
您的最终优惠价格是: 68.6 元
~~~~~~~~~~~~~~~~~~
当前是普通会员,打折是9折
您的最终优惠价格是: 88.2 元
~~~~~~~~~~~~~~~~~~
当前不是会员,不打折
您的最终优惠价格是: 98.0 元

结果也是 符合我们预期的结果的。


爆款云服务器s6 2核4G 低至0.46/天,具体规则查看活动详情Blog Img