题目:
使用策略模式实现商场收银程序,满足商场随时可能会变化的优惠活动的需求,具体描述如下:
收费模式现有3种:
1、正常收费
2、打折(80%)
3、满减(满300减100)
类图:
代码:
package Strategy;
import java.util.Scanner;
interface CashSuper
{
double acceptCash(double money);
};
//1、正常收费
class CashNormal implements CashSuper
{
public double acceptCash(double money) { return money; }
};
//2、打折
class CashRebate implements CashSuper
{
private double moneyRebate;
CashRebate(double moneyRebate){ this.moneyRebate = moneyRebate; }
public double acceptCash(double money) { return money*moneyRebate; }
};
//3、满减
class CashReturn implements CashSuper
{
private double moneyCondition;
private double moneyReturn;
CashReturn(double moneyCondition, double moneyReturn)
{
this.moneyCondition = moneyCondition;
this.moneyReturn = moneyReturn;
}
public double acceptCash(double money)
{
double result = money;
if (money >= moneyCondition)
{
result = money - Math.floor(money / moneyCondition) * moneyReturn;
}
return result;
}
};
class CashContext
{
private CashSuper cs = null;
CashContext(int type)
{
switch (type)
{
case 1:
cs = new CashNormal();
break;
case 2:
cs = new CashRebate(0.8);
break;
case 3:
cs = new CashReturn(300, 100);
break;
}
}
public double GetResult(double money){ return cs.acceptCash(money); }
};
public class Cash {
public static void main(String[] args){
CashContext cc;
System.out.println("请输入收费类型:1、正常收费 2、打折 3、满减" );
Scanner scanner = new Scanner(System.in);
int type = scanner.nextInt();
scanner.close();
cc = new CashContext(type);
System.out.println("应收费: " + cc.GetResult(800));
}
}
结果: