商场收银软件为例:
//现金收费抽象类
public abstract class CashSuper {
public abstract double acceptCash(double money);
}
//正常收费
public class CashNormal extends CashSuper{
@Override
public double acceptCash(double money) {
return money;
}
}
//打折收费
public class CashRebate extends CashSuper{
private double moneyRebate=1d;//
public CashRebate(String moneyRebate)
{
this.moneyRebate=Double.parseDouble(moneyRebate);
}
@Override
public double acceptCash(double money) {
return money*moneyRebate;
}
}
//返利收费
import java.lang.Math;
import java.lang.*;
//返利收费
public class CashReturn extends CashSuper{
private double moneyCondition=0.0d;
private double moneyReturn=0.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(money>=moneyCondition)
result=money-Math.floor(money/moneyCondition)*moneyReturn;
return result;
}
}
//CashContext
public class CashContext {
private CashSuper cs;
public CashContext(CashSuper csuper)//通过构造方法,传入具体的策略
{
this.cs=csuper;
}
public double GetResult(double money)
{
return cs.acceptCash(money);//根据策略的不同,获得计算结果
}
}
//客户端
import java.util.Scanner;
public class main {
public static void main(String[] args) {
double total=0.0d;
CashContext cc=null;
Scanner cin=new Scanner(System.in);
String s=cin.next();
double a=cin.nextDouble();//单价
double b= cin.nextDouble();//数量
switch (s)
{
case "正常收费":
cc=new CashContext(new CashNormal());
break;
case "满300返100":
cc=new CashContext(new CashReturn("300","300"));
break;
case "打8折":
cc=new CashContext(new CashRebate("0.8"));
break;
}
double totalPrices=0d;
totalPrices=cc.GetResult(a*b);
total=total+totalPrices;
System.out.println(total);
}
}