这次继续是收银系统,不过使用了简单工厂模式来实现收银系统的打折和返现等活动;
收银抽象父类:一个抽象方法接受价格并返回结果
package com.zuo.third;
/**
* 现金收费抽象父类
*/
public abstract class CashSuper {
//抽象方法,参数为原价,返回值为当前价
public abstract double acceptCash(Double money);
}
三个子类实现抽象父类重写抽象方法来实现不同的收银方式:
原价子类:
package com.zuo.third;
/**
* 不搞活动,原价返回
*/
public class CashNomal extends CashSuper{
@Override
public double acceptCash(Double money) {
return money;
}
}
打折子类:
package com.zuo.third;
/**
* 打折类,选择打几折,返回打折后的金额
*/
public class CashRebate extends CashSuper {
//打几折
double rebate = 1d;
public CashRebate(double rebate) {
this.rebate = rebate;
}
@Override
public double acceptCash(Double money) {
return money * rebate;
}
}
返利子类:
package com.zuo.third;
/**
* 满多少返利子类
*/
public class CashReturn extends CashSuper{
double moneyCondition = 0d;
double moneyReturn = 0d;
// moneyCondition 是满几百 ,moneyReturn 是返回多少
public CashReturn(double moneyCondition,double moneyReturn ){
this.moneyCondition = moneyCondition;
this.moneyReturn = moneyReturn;
}
@Override
public double acceptCash(Double money) {
double result = money;
if (money >= moneyCondition){
result = result - (money/moneyCondition) * moneyReturn;
}
return result;
}
}
一个工厂类,根据不同的类型创建返回不同的实例对象:
package com.zuo.third;
public class CashFactory {
public static CashSuper createCashAccept(String type){
CashSuper cs = null;
switch(type){
case "原价":
cs = new CashNomal();
break;
case "满300返100":
cs = new CashReturn(300,100);
break;
case "打八折":
cs = new CashRebate(0.8);
break;
}
return cs;
}
}
一个客户端类,用来接收输入,并在把结果输出在控制台:
package com.zuo.third;
import java.util.Scanner;
public class Client {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入类型:(“原价”、“满300返100”、“打八折”)");
String tpye = sc.next();
CashSuper cashSuper = CashFactory.createCashAccept(tpye);
double toalPrice = 0d;
System.out.println("请输入单价:");
double price = sc.nextDouble();
System.out.println("请输入数量:");
double number = sc.nextDouble();
toalPrice = cashSuper.acceptCash(price * number);
System.out.println("总计:" + toalPrice);;
}
}