点餐系统(设计模式)

同学们应该都去麦当劳或肯德基吃过快餐吧?请同学们参考肯德基官网的信息模拟肯德基快餐店的收银系统,结合设计模式(2种以上)至少实现系统的以下功能:


正常餐品结算和找零。
基本套餐结算和找零。
使用优惠劵购买餐品结算和找零。
可在一定时间段参与店内活动(自行设计或参考官网信息)。
模拟打印小票的功能(写到文件中)。


用到的设计模式有抽象工厂模式,工厂模式,策略模式等。抽象工厂模式用来产生套餐,策略模式用来实现不同活动下实现不同价格的算法。
1. 抽象工场模式下包括一个食物基类baseFood,以及一个食物接口IFood,还有四种具体食物抽象类。
食物基类包含食物的种类,价格以及数量,还有总价函数和计算价格函数:

//基础食物类
public  class **baseFood** implements MemberStrategy{
		public String kind;//食物种类
	    public int num;//食物数量
		public float price;//价格
		public float calcPrice(float foodPrice) {
			 return this.num*this.price;
		 }
		//总价(原价)
		public float totalPrice() {
			return this.num*this.price;
		}
	}

IFood接口:

public interface IFood {
/*打印输出食物信息*/
void printMessage();
}

汉堡抽象类:

/*
 * 汉堡基类
 */
public abstract class Hamburg extends baseFood implements IFood{
	//方法重构
	public void printMessage() {
		System.out.println("--"+this.kind+"汉堡\t 单价:"+this.price+
				"数量"+this.num/*+"合计"+this.totalPrice()*/);
	}
}

鸡翅抽象类:

public abstract class ChickenWings extends baseFood implements IFood{
	public void printMessage() {
		System.out.println("--"+this.kind+"鸡翅\t 单价:"+this.price+
				"数量"+this.num/*+"合计"+this.totalPrice()*/);
	}
}

薯条抽象类:

public abstract class FrenchFires extends baseFood implements IFood{
	public void printMessage() {
		System.out.println("--"+this.kind+"薯条\t 单价:"+this.price+
				"数量"+this.num/*"合计"+this.totalPrice()*/);
	}
}

饮品抽象类:

public abstract class Drink extends baseFood implements IFood{
	public void printMessage() {
		System.out.println("--"+this.kind+"饮料\t 单价:"+this.price+
				"数量"+this.num/*+"合计"+this.totalPrice()*/);
	}
}

抽象工厂类:

public interface IKFCFactory {
	    // 生产汉堡
		public Hamburg createHamburg(int num1);
		// 生产薯条
		public FrenchFires createFrenchFries(int num2);
		// 生产鸡翅
		public ChickenWings createChickenWings(int num3);
		// 生产饮料
		public Drink createBeverage(int num4);
}

工厂实现类:

public  class KfcFactory implements IKFCFactory {
	//生产汉堡
	public Hamburg createHamburg(int num) {
		// TODO Auto-generated method stub
		return new ChinaHanburm(num);
		
	}
	//生产薯条
	public FrenchFires createFrenchFries(int num) {
		// TODO Auto-generated method stub
		return new ChinaFrenchFries(num);
	}
	//生产鸡翅
	public ChickenWings createChickenWings(int num) {
		// TODO Auto-generated method stub
		return new ChinaChickenWings(num);
	}
	@Override
	public Drink createBeverage(int num) {
		// TODO Auto-generated method stub
		return new IDrink(num);
	}
}
  1. 策略模式下有MemberStrategy接口,接口的实现类Activity,baseStrategy和Price类。
    MemberStrategy接口:
/*策略模式,分出四种计算价格的算法
 * 1.有优惠券,无活动
 * 2.有活动,有优惠券
 * 3.无活动,无优惠劵
 * 4.有活动+有优惠券
 */
public interface MemberStrategy {
	/**
     * 计算餐品的价格
     * @param booksPrice    餐品的原价
     * @return    计算出打折后的价格
     */
	 public float calcPrice(float foodPrice);
}

Price类:

//两个实例
	private MemberStrategy strategy;
	@SuppressWarnings("unused")
	private MemberStrategy strategy1;
    /**
     * 构造函数,传入一个具体的策略对象
     * @param strategy    具体的策略对象
     */
    public Price(MemberStrategy strategy){
        this.strategy = strategy;
        this.strategy1=strategy;    }
    
    /**
     * 计算餐品的价格
     * @param foodPrice    餐品的原价
     * @return    计算出打折后的价格
     */
    public float quote (float foodPrice ){
        return this.strategy.calcPrice(foodPrice);
    }
}

baseStrategy类:

/*
 * 优惠券
 */
public class baseStrategy  implements MemberStrategy{
	public float calcPrice(float foodPrice) {//重写计算价格方法
		return foodPrice-10;//10元的优惠券
	}
}

Activity类:

//活动
/*
 * 店家有活动时所有商品打85折
 */
public class Activity implements MemberStrategy{
	public float calcPrice(float foodPrice) {//重写计算价格方法
		return foodPrice*0.85f;
	}
}

设计类图如下:
点餐系统(设计模式)_第1张图片
界面如下:
点餐系统(设计模式)_第2张图片

你可能感兴趣的:(点餐系统(设计模式))