设计模式-策略模式
来源:互联网 发布:时间都去哪儿了 知乎 编辑:程序博客网 时间:2024/06/04 00:51
举个例子商场收银促销活动,使用打折还是返利,其实都是一些算法,使用简单工厂生成算法对象也没有问题,但是算法本身是一种策略,最重要的是算法是
随时都有可能互相替换的,这就是变化点,而封装变化点是我们面向对象的一种很重要的思维方式。
1、抽象策略类
/**
* ClassName:CashSuper <br/>
* Description: 抽象策略类. <br/>
*/
public abstract class CashSuper {
/**
* 获得总收费
*
* @param money
* 促销前的总额
* @return 促销后总额
*/
public abstract double acceptCash(double money);
}
2、正常收费
public class CashNormal extends CashSuper {
/**
* 正常收费.
*
* @see org.jiajun.pattern.test2.CashSuper#acceptCash(double)
*/
@Override
public double acceptCash(double money) {
return money;
}
}
3、打折收费
public class CashRebate extends CashSuper {
/**
* 折扣率 如八折(0.8)
*/
private double moneyRebate = 1d;
public CashRebate(String moneyRebate) {
this.moneyRebate = Double.parseDouble(moneyRebate);
}
@Override
public double acceptCash(double money) {
return money * moneyRebate;
}
}
4、满多少返多少
public class CashReturn extends CashSuper {
// 返利收费,如满300返100
private double moneyCondition = 0d;
private double moneyReturn = 0d;
public CashReturn(String moneyCondition, String moneyReturn) {
this.moneyCondition = Double.parseDouble(moneyCondition);
this.moneyReturn = Double.parseDouble(moneyReturn);
}
@Override
public double acceptCash(double money) {
double result = money;
if (result >= moneyCondition)
result = money - Math.floor(money / moneyCondition) * moneyReturn;
return result;
}
}
5、根据不同业务使用不同的策略
public class CashContext {
private CashSuper cashSuper;
public CashContext(CashSuper cashSuper) {
this.cashSuper = cashSuper;
}
/**
* 根据策略不同获得不同的结果
*
* @param money
* @return
*/
public double getResult(double money) {
return cashSuper.acceptCash(money);
}
}
这样就能随时更换促销活动了。
- 设计模式-策略模式
- 设计模式:策略模式
- 设计模式-策略模式
- 设计模式 - 策略模式
- 设计模式-策略模式
- 设计模式-----策略模式
- 设计模式 策略模式
- 设计模式-策略模式
- 设计模式-【策略模式】
- 设计模式-----策略模式
- 设计模式-策略模式
- 设计模式--策略模式
- 设计模式- 策略模式
- 设计模式- 策略模式
- 设计模式------策略模式
- 设计模式--策略模式
- 设计模式-策略模式
- 设计模式--策略模式
- eclipse出现java.lang.ClassNotFoundException: util.web.SetCharacterEncodingFilter
- Linux——Ubuntu下显卡驱动的安装
- SendMailJob 530 Must issue a STARTTLS command first.
- 原生ajax异步请求问题--3次握手
- J2EE系列之Struts2学习笔记(七)--struts.xml配置
- 设计模式-策略模式
- 输入+算法+输出
- IPQ4019MTD分区生成的过程
- iOS多种cell使用FDTemplateLayoutCell自动计算高度
- 在github下载的ECharts-GL打开一片黑色
- java23种设计模式理解和练习总结
- Android面试题-oauth认证协议原理
- springboot+dubbo框架下服务注册时不能创建bean对象
- collect.conf