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