写在前面的话:首先撒花✿✿ヽ(°▽°)ノ✿其次代码有些小问题,对于设计模式的掌握不是很好,运用也不是很顺利,在写的过程中出现了一些错误,并且错误还改了好久,总之代码存在些小错误,如有不当,请大神多多指出!!!
同学们应该都去麦当劳或肯德基吃过快餐吧?请同学们参考肯德基官网的信息模拟肯德基快餐店的收银系统,合理使用C++或Java或Python结合设计模式(2种以上)至少实现系统的以下功能:
1.正常餐品结算和找零。
2.基本套餐结算和找零。
3.使用优惠劵购买餐品结算和找零。
4.可在一定时间段参与店内活动(自行设计或参考官网信息)。
5.模拟打印小票的功能(写到文件中)。
设计模式:
- 抽象工厂设计模式:抽象工厂提供了一个接口,用于创建相关或者依赖的对象。
- 抽象食物的建立:AbstracBaseFood
-
- package pers.几个九.KFC;
- /**
- * 食物基类,基本信息
- * @author 商嘉鑫
- *
- */
- public abstract class AbstractBaseFood {
- //类别
- protected String kind ;
- //数量
- protected int num ;
- //价格
- protected float price ;
- //合计
- public float totalPrice()
- {
- return this . num * this . price ;
- }
- }
该类设计成抽象类,类内设有事务类别,数量,价格,总计等字段。
- 食物接口的建立:Ifood
-
- package pers.几个九.KFC;
- /**
- * 抽象食物接口
- * @author 商嘉鑫
- *
- */
- public interface IFood {
- /**
- * 打印出食物信息
- */
- void printMessage();
- }
用于打印食物信息,类内设有printMessage方法
- 不同食物基类的建立:继承抽象食物,接口食物接口
-----Hamburg(汉堡基类)
- package pers.几个九.KFC;
-
- public abstract class Hamburg extends AbstractBaseFood implements IFood {
- public void printMessage()
- {
- System.out.println("--"+this.kind+"风味汉堡,\t单价:"+this.price +",\t数量:"+this.num+",\t合计"+this.totalPrice());
- }
-
- }
-----Chicken_Wings(鸡翅类)
- package pers.几个九.KFC;
-
- public abstract class Chicken_Wings extends AbstractBaseFood implements IFood{
- public void printMessage()
- {
- System.out.println("--"+this.kind+"五香鸡翅,\t单价:"+this.price +",\t数量:"+this.num+",\t合计"+this.totalPrice());
- }
- }
-----FrenchFries(薯条类)
- package pers.几个九.KFC;
-
- public abstract class FrenchFries extends AbstractBaseFood implements IFood{
- public void printMessage()
- {
- System.out.println("--"+this.kind+"大份鸡翅,\t单价:"+this.price +",\t数量:"+this.num+",\t合计"+this.totalPrice());
- }
- }
-----Drink(饮品类)
- package pers.几个九.KFC;
-
- public abstract class Drink extends AbstractBaseFood implements IFood{
- public void printMessage()
- {
- System.out.println("--"+this.kind+"饮品,\t单价:"+this.price +",\t数量:"+this.num+",\t合计"+this.totalPrice());
- }
- }
- 具体食物类的创建:
-----Zinger_Burger(麻辣汉堡)
- package pers.几个九.KFC;
- /**
- * 具体食物
- * @author 商嘉鑫
- *
- */
- public class Zinger_Burger extends Hamburg {
- /**
- * 构造函数为属性赋值
- * @param num
- */
- Zinger_Burger(int num)
- {
- this.kind="麻辣";
- this.price=14.0f;
- this.num=num;
- }
- }
-----Orleams_Wing(奥尔连鸡翅)
- package pers.几个九.KFC;
-
- public class Orleams_Wing extends Chicken_Wings {
- /**
- * 构造函数
- */
- Orleams_Wing(int num)
- {
- this.kind="奥尔良鸡翅";
- this.price=10.0f;
- this.num =num;
- }
- }
-----Big_FrenchFries(大薯条)
- package pers.几个九.KFC;
-
- public class Big_FrenchFries extends FrenchFries{
- /**
- * 构造函数
- */
- Big_FrenchFries(int num)
- {
- this.kind="大份薯条";
- this.price=10.0f;
- this.num=num;
- }
- }
-----CocaCola(可乐)
- package pers.几个九.KFC;
-
- public class CocaCola extends Drink{
- /**
- * 构造函数
- */
- CocaCola(int num)
- {
- this.kind="可乐";
- this.price=7.0f;
- this.num=num;
- }
- }
- 抽象肯德基工厂的建立IKFCfactory
用来生产抽象食物
- package pers.几个九.KFC;
- /**
- * KFC抽象工厂,生产抽象食物
- * @author 商嘉鑫
- *
- */
- public interface IKFCfactory {
- //生产汉堡
- public Hamburg make_Hamburger(int num);
- //生产饮品
- public Drink make_Drink(int num);
-
- //生产薯条
- public FrenchFries make_FrenchFries(int num);
- //生产鸡翅
- public Chicken_Wings make_Wings(int num);
- }
- 具体肯德基工厂的创建Re_food_Factory
用来生产具体食物
- package pers.几个九.KFC;
-
- public class Re_food_Factory implements IKFCfactory{
- //生产可乐
- public Drink make_Drink(int num)
- {
- return new CocaCola(num);
- }
-
-
- @Override
- public Hamburg make_Hamburger(int num) {
- // TODO Auto-generated method stub
- return new Zinger_Burger(num);
- }
-
-
- //生产麻辣汉堡
- public Hamburg make_Hamburg(int num)
- {
- return new Zinger_Burger(num);
- }
-
- //生产大薯条
- public FrenchFries make_FrenchFries(int num)
- {
- return new Big_FrenchFries(num);
- }
-
-
-
-
-
-
-
- //生产麻辣鸡翅
- public Chicken_Wings make_Wings(int num)
- {
- return new Orleams_Wing(num);
- }
-
- }
2.策略模式:
- 策略模式接口的创建;
用来计算打折或使用优惠券后的价格
- package pers.几个九.KFC;
- /**
- * 策略模式
- * 1---有优惠券,无活动
- * 2---有活动,有优惠券
- * 3---无活动,无优惠券
- * @author 商嘉鑫
- *
- */
- public interface MemberStrategy {
- /**
- * 计算餐品价格
- */
- public float calcPrice(float foodPrice);
-
- }
- 接口实现类Price的创建
-
- package pers.几个九.KFC;
- public class Price {
- //实例
- private MemberStrategy strategy;
- private MemberStrategy srtategy1;
- /**
- * 构造函数
- */
- public Price(MemberStrategy strategy) {
- this.strategy=strategy;
- this.srtategy1=strategy;
- }
- /**
- * 计算餐品价格
- */
- public float quote(float foodPrice){
- return this.strategy.calcPrice(foodPrice);
- }
- }
- 接口实现类BaseStrategy的创建
-
- package pers.几个九.KFC;
- public class BaseStrategy implements MemberStrategy{
- @Override
- public float calcPrice(float foodPrice) {//重写计算价格方法
- // TODO Auto-generated method stub
- return foodPrice-10;//10元优惠券
- }
- }
用于实现10元优惠券的价格
- 接口实现类Activity的创建
-
- package pers.几个九.KFC;
- /**
- * 85折活动
- * @author 商嘉鑫
- *
- */
- public class Activity implements MemberStrategy{
- @Override
- public float calcPrice(float foodPrice) {//重写
- // TODO Auto-generated method stub
- return foodPrice*0.85f;//85折
- }
- }
用于实现店内有活动的价格
很晚了,有点困