设计模式之策略模式

使用场景,实现一个需求,要在多种不同的解决方案中选中一个。如商场打折等促销活动,最终需求只有一个,就是能够知道优惠后,顾客需要付多少钱。

// 环境类与抽象策略类写在一起
public abstract class CommodityCash{
	private double money;
	setter;
	getter;
	public abstract double getRealMoney();
}
// 正常,无优惠
public class CashNormal extends CommodityCash{
	@Override
	public double getRealMoney(){
		return getMoney()
	}
}
// 打折优惠
public class CashRebate extends CommodityCash{
	private double moneyRebate	//折扣
	public CashRebate(double moneyRebate){
		if(money <=0 || money >10){
			throw new Exception("折扣不合规")
		}
		this.moneyRebate = moneyRebate
	}
	@Override
	public double getRealMoney(){
		return 	getMoney() * moneyRebate /10;
	}
}
// 客户端
public class Client{
	psvm{
		CommodityCash cash= new CashRebate(6);
		cash.setMoney(1000);	// 原价
		cash.getReakMoney();	//现价

		cash = new CashNormal ();
		cash.setMoney(100);
		cash.getRealMoney;
	}
}
// 若是添加了新的优惠方式(满减)
public class CashReturn extends CommodityCash{
	private double minMoney;	// 符合满减的小金额
	private double returnMoney;	// 满减返回的现金
	public CashReturn (double minMoney, double returnMoney){
		this.minMoney = minMoney;
		this.returnMoney = returnMoney;
	}
	@Override
	public double realMoney(){
		if(getMoney()>minMoney){
			int x = (int)(getMoney() / minMoney);
			return money - returnMoney*x;
		}else{
			return 0;
		}
	}
}
// 客户端可以直接使用。满足开闭原则
public class Client{
	psvm{
		CommodityCash cash= new CashRebate(6);
		cash.setMoney(1000);	// 原价
		double money = cash.getReakMoney();	//现价

		cash = new CashNormal ();
		cash.setMoney(100);
		money  = cash.getRealMoney;
		
		cash = new CashReturn (300, 50)	// 满300减50;
		cash.setMoney(600);
		money = cash.getRealMoney
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值