一.题目
请同学们参考肯德基官网的信息模拟肯德基快餐店的收银系统,合理使用C++或Java或Python结合设计模式(2种以上)至少实现系统的以下功能:
1.正常餐品结算和找零。
2.基本套餐结算和找零。
3.使用优惠劵购买餐品结算和找零。
4.可在一定时间段参与店内活动(自行设计或参考官网信息)。
5.模拟打印小票的功能(写到文件中)。
基本要求:
1.程序设计风格良好,控制台界面友好,最多两人一组完成任务。
2.实现功能测试代码,确保程序的健壮性。
3.画出使用的设计模式图。
二.题目分析
模拟肯德基点餐系统,我准备采用学过的抽象模式方法。第一步:抽象出食物接口,并创建食物的基类。第二步:模拟肯德基店的食物进一步建立抽象基类鸡翅类、饮料类、汉堡类、薯条类,这些抽象类实现食物类接口,并且继承食物基类。第三步:将第二步建立的那些抽象类具体化,建立鸡翅实现类、饮料实现类、汉堡实现类、薯条实现类。第四步:建立工厂接口,生产鸡翅、饮料、汉堡、薯条,再建立具体生产工厂,实现生产方法,返回要生产的食物对象。第五步:建立客户端类,抽象类无法直接创建自己的实例化对象,在客户端类中我们实现具体的关联,通过抽象工厂中的方法返回具体生产对象,建立抽象具体食物的对象。这样我们就可以返回具体食物的信息,完成具体食物的生产。
本次实验所用的抽象工厂方法的一些介绍如下,便于我们理解,清晰我们的思路。
抽象工厂模式:提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类,属于对象创建型模式。
下面是一个简单的模式图
三.设计类图
程序代码如下:
package com.demo.factory.model;
public abstract class AbstractBaseFood {
// 类别
protected String kind;
// 数量
protected int num;
// 价格
protected float price;
// 合计
public float totalPrice()
{
return this.num * this.price;
}
}
package com.demo.factory.model;
public abstract class Beverage extends AbstractBaseFood implements IFood
{
public String printMesage()
{
return("--" + this.kind + "饮料,\t单价:" + this.price + ",\t数量:" + this.num + ",\t合计:" + this.totalPrice());
}
}
package com.demo.factory.model;
public abstract class ChickenWings extends AbstractBaseFood implements IFood {
public String printMesage()
{
return("--" + this.kind + "风味鸡翅,\t单价:" + this.price + ",\t数量:" + this.num + ",\t合计:" + this.totalPrice());
}
}
package com.demo.factory.model;
public abstract class FrenchFries extends AbstractBaseFood implements IFood {
public String printMesage()
{
return("--" + this.kind + "风味薯条,\t单价:" + this.price + ",\t数量:" + this.num + ",\t合计:" + this.totalPrice());
}
}