策略设计模式

        策略设计模式用以封装一系列算法的选择,这些算法通常被封装在一个特定的类中(Context),客户端程序可以自由选择其中的算法,使用策略设计模式的作用是支持算法之间的自由切换。下面以电子商场为普通客户和VIP客户打折为例,说明策略模式的应用:

1.

package com.lanp.change;

/**
 * 打折的接口
 * @author LanP
 * @version v1.0
 */
public interface IMyDiscount {
 double getDiscount(double price);
}

 

2.

package com.lanp.change;

/**
 * 普通会员的打折
 * @author LanP
 * @version v1.0
 */
public class MyPubDiscount implements IMyDiscount {

 @Override
 public double getDiscount(double price) {
  System.out.println("普通会员的商品打折!");
  return 0.75 * price;
 }

}

 

3.

package com.lanp.change;

/**
 * VIP会员的打折
 * @author LanP
 * @version v1.0
 */
public class MyVipDiscount implements IMyDiscount {

 @Override
 public double getDiscount(double price) {
  System.out.println("VIP会员的商品打折!");
  return 0.5 * price;
 }

}

 

4.

package com.lanp.change;

/**
 * 电子商城商品打折的策略类,灵活地提供了不同策略供客户端选择
 * @author LanP
 * @version v1.0
 */
public class MyDiscount {
 private IMyDiscount iMyDiscount;
 
 public MyDiscount(IMyDiscount iMyDiscount) {
  this.iMyDiscount = iMyDiscount;
 }
 
 public double getDiscountPrice(double price) {
  //默认提供普通会员的折扣价
  if(null == iMyDiscount) {
   iMyDiscount = new MyPubDiscount();
  }
  return iMyDiscount.getDiscount(price);
 }
 
 
 /**
  * 提供用于切换打折策略的方法
  * @param iMyDiscount
  */
 public void changeIMyDiscount(IMyDiscount iMyDiscount) {
  this.iMyDiscount = iMyDiscount;
 }
}

 

5.

package com.lanp.change;

/**
 * 测试商品打折的实现类
 * @author LanP
 * @version v1.0
 */
public class TestMyDiscount {

 public static void main(String[] args) {
  //没有选择打折时使用默认的打折策略
  MyDiscount myDiscount = new MyDiscount(null);
  double price = 100;
  System.out.println("100元的商品默认折扣价是: " + myDiscount.getDiscountPrice(price));
  
  //普通会员的折扣价
  myDiscount.changeIMyDiscount(new MyPubDiscount());
  System.out.println("100元商品普通会员的折扣价: " + myDiscount.getDiscountPrice(price));
  
  //VIP会员的折扣价
  myDiscount.changeIMyDiscount(new MyVipDiscount());
  System.out.println("100元商品VIP会员的折扣价: " + myDiscount.getDiscountPrice(price));
 }

}

 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值