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/天,具体规则查看活动详情