题目:
同学们应该都去麦当劳或肯德基吃过快餐吧?请同学们参考肯德基官网的信息模拟肯德基快餐店的收银系统,合理使用C++/python/Java,结合设计模式(2种以上)实现系统的以下功能:
1.正常餐品结算和找零。
2.基本套餐结算和找零。
3.使用优惠劵购买餐品
结算和找零。
4.可在一定时间段参与店内活动。
5.模拟打印小票的功能(写到文件中)。
本题采用工厂方法模式和抽象工厂模式:
工厂方法模式:
核心工厂类不再负责所有产品的创建,而是将具体创建的工作交给子类去做,成为一个抽象工厂角色,仅负责给出具体工厂类必须实现的接口,而不接触哪一个产品类应当被实例化这种细节。
抽象工厂模式:
客户类和工厂类分开。消费者任何时候需要某种产品,只需向工厂请求即可。消费者无须修改就可以接纳新产品。缺点是当产品修改时,工厂类也要做相应的修改。如:如何创建及如何向客户端提供。
类图如下:
java代码如下:
1.抽象食
物——AbstractFood
public abstract class AbstractFood {
//类别
protected String kind;
//数量
protected int num;
//价格
protected float price;
//合计
public float totalPrice(){
return this.num * this.price;
}
}
2.食物接口——Food
public interface Food {
/**
* 打印输出食物信息
*/
void printMessage();
}
3.抽象基类:
/**
* 汉堡类
* @author lenovo
*
*/
public abstract class Hamburger extends AbstractFood implements Food{
public void printMessage(){
System.out.println("--"+this.kind+" 单价:"+this.price+
" 数量:"+this.num+" 合计:"+this.totalPrice());
}
}
/**
* 鸡肉类
* @author lenovo
*
*/
public abstract class Chicken extends AbstractFood implements Food{
public void printMessage(){
System.out.println("--"+this.kind+" 单价:"+this.price+
" 数量:"+this.num+" 合计:"+this.totalPrice());
}
}
/**
* 甜点类
* @author lenovo
*
*/
public abstract class Dessert extends AbstractFood implements Food{
public void printMessage(){
System.out.println("--"+this.kind+" 单价:"+this.price+
" 数量:"+this.num+" 合计:"+this.totalPrice());
}
}
/**
* 饮品类
* @author lenovo
*
*/
public abstract class Drinks extends AbstractFood implements Food{
public void printMessage(){
System.out.println("--"+this.kind+" 单价:"+this.price+
" 数量:"+this.num+" 合计:"+this.totalPrice());
}
}
/**
* 套餐
* @author lenovo
*
*/
public abstract class Combo extends AbstractFood implements Food{
public void printMessage(){
System.out.println("--"+this.kind+" 单价:"+this.price+
" 数量:"+this.num+" 合计:"+this.totalPrice());
}
}
4.具体食物:
/**
* 香辣鸡腿堡
* @author lenovo
*
*/
public class ZingerBurger extends Hamburger {
public ZingerBurger(int num) {
this.kind = "香辣鸡腿堡";
this.price = 15f;
this.num = num;
}
}
/**
* 超级牛肉堡
* @author lenovo
*
*/
public class BeefBurger extends Hamburger{
public BeefBurger(int num) {
this.kind = "超级牛肉堡";
this.price = 17f;
this.num = num;
}
}
/**
* 全虾堡
* @author lenovo
*
*/
public class ShrimpBurger extends Hamburger{
public ShrimpBurger(int num) {
this.kind = "全虾堡"