优惠策略实现java_策略模式(Strategy)_java实现

//20210124

写在前面:刚期末考试完,考了面向对象,里边儿有23个设计模式,我寻思着考完挨个儿实现一下,本文实现策略模式

策略模式核心思想

设置一个算法父类,然后实现多种不同方法子类,用户只用选择背景,以及背景中的算法,就可以实现不同功能

程序源代码:

/**

* 活动父类

*/

public abstract class CashSuper{

public abstract double acceptCash(double money);

}

/**

* 返利类型

*/

public class CashReturn extends CashSuper{

private double moneyConditation = 0.0;//返利条件

private double moneyReturn = 0.0d;//返利数额

public CashReturn(double moneyConditation,double moneyRebate){

this.moneyConditation = moneyConditation;

this.moneyReturn = moneyRebate;

}

@Override

public double acceptCash(double money){

double result = money;

if(money >= moneyConditation){

result = money - Math.floor(money/moneyConditation)*moneyReturn;

}

return result;

}

}

/**

* 打折,传入折扣数,返回打折后价钱(默认不打折)

*/

public class CashRebate extends CashSuper{

private double moneyRebate = 1;//折扣

public CashRebate (double moneyRebate){

this.moneyRebate = moneyRebate;

}

@Override

public double acceptCash(double money){

return money*moneyRebate;

}

}

/**

* 普通模式,没有任何打折活动

*/

public class CashNormal extends CashSuper{

@Override

public double acceptCash(double money){

return money;

}

}

/**

* 背景,用于承载算法

*/

public class CashContext{

private CashSuper cashSuper;

public CashContext(CashSuper cashSuper){

this.cashSuper = cashSuper;

}

public double getResult(double money){

return cashSuper.acceptCash(money);

}

}

/**

* 测试主类

*/

import java.util.Scanner;

public class Main{

public static void main(String args[]){

CashContext cashContext = null;

Scanner scanner = new Scanner(System.in);

System.out.println("请输入折扣方法:1、2、3");

System.out.println("1.无活动(原价)、2.满300减100、3.打八折");

int in = scanner.nextInt();

String type = "";

//选择折扣类型

switch(in){

case 1:

cashContext = new CashContext (new CashNormal());

type += "无活动(原价)";

break;

case 2:

cashContext = new CashContext(new CashReturn(300,100));

type += "满300减100";

break;

case 3:

cashContext = new CashContext(new CashRebate(0.8));

type += "打八折";

break;

default:

System.out.println("请输入1/2/3其中的一个数字");

return;

}

double totalPrices = 0;

System.out.println("单件价格:");

double price = scanner.nextDouble();

System.out.println("总数量:");

double num = scanner.nextDouble();

totalPrices = cashContext.getResult(price * num);

System.out.println("单价:" + price + ",数量" + num + ",折扣类型" + type + ",总价" + totalPrices);

scanner.close();

}

}

输出如下:

248a7eed85a86eab1e1cca89314d4576.png

以上

希望对大家有所帮助

原文:https://www.cnblogs.com/lavender-pansy/p/14324449.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值