概述
设计模式—策略模式
- 描述
- 代码
描述
学习笔录,不足之处大神多多指教。
策略模式定义了一系列的算法,并将每一个算法封装起来,使每个算法可以相互替代,使算法本身和使用算法的客户端分割开来,相互独立。
代码
场景:商场收银体系(正常收费、折扣、满减)
1.父类
public
interface CashSuper {
/**
* 获取金额
*
* @param cashContext
* @return
*/
double acceptCash(CashContext cashContext);
}
2.正常、折扣、满减
public class CashNormal implements CashSuper {
@Override
public double acceptCash(CashContext cashContext) {
return cashContext.getMoney();
}
}
public class CashRebate implements CashSuper {
private double moneyRebate;
public CashRebate(String moneyRebate) {
this.moneyRebate = Double.parseDouble(moneyRebate);
}
@Override
public double acceptCash(CashContext cashContext) {
return cashContext.getMoney() * moneyRebate;
}
}
public class CashReturn implements CashSuper {
/**
* 条件
*/
private double moneyCondition;
/**
* 满减
*/
private double moneyReturn;
public CashReturn(String condition, String returnData) {
this.moneyCondition = Double.parseDouble(condition);
this.moneyReturn = Double.parseDouble(returnData);
}
@Override
public double acceptCash(CashContext cashContext) {
double result = cashContext.getMoney();
if (result > moneyCondition) {
result = result - Math.floor(cashContext.getMoney() / moneyCondition) * moneyReturn;
}
return result;
}
}
3、上下文
@Data
public class CashContext {
private CashSuper cashSuper;
private double money;
public CashContext(String money) {
this.money = Double.parseDouble(money);
cashSuper = new CashNormal();
}
public CashContext(String money, String moneyRebate) {
this.money = Double.parseDouble(money);
cashSuper = new CashRebate(moneyRebate);
}
public CashContext(String money, String condition, String returnData) {
this.money = Double.parseDouble(money);
cashSuper = new CashReturn(condition, returnData);
}
public double getResult() {
return cashSuper.acceptCash(this);
}
}
3、调用
public class StrategyOperate {
public static void main(String[] args) {
getResult();
}
private static void getResult() {
CashContext cashContext;
// 正常收费
cashContext = new CashContext("300");
System.out.println(cashContext.getResult());
// 折扣
cashContext = new CashContext("300", "0.8");
System.out.println(cashContext.getResult());
// 满减
cashContext = new CashContext("300", "200", "10");
System.out.println(cashContext.getResult());
}
}
简单工厂和策略模式区别在哪里?
小心上面代码中的 Bug;我只知道这些代码是正确的,但没有试过。
最后
以上就是害羞饼干为你收集整理的大话设计模式-笔录2-策略模式的全部内容,希望文章能够帮你解决大话设计模式-笔录2-策略模式所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复