1、算法设计思路
这个题我用了工厂方法和抽象工厂模式
这个题目大体有这几大块:工厂-具体生产工厂 作为工厂;食物-汉堡,鸡翅,薯条,饮料 作为产品;职员-负责点餐;顾客-购买食物。
- KFCFactory作为工厂接口,KFCFactory1来具体实现它;
- Foodinfo作为抽象类,里面有商品属性信息和计算总价方法,Food作为产品接口,类似Hamburgers类来继承和实现这两个类,打印出商品信息。SpeHamburgers是继承Humburgers类,在构造函数中为商品信息赋值。
- Clerk职员类,主要是来订购食物的,在函数里将订购信息存入文件中,输出订购信息,返回总价。
- 最后是顾客订购食物的OrderFood类,在这个类的函数里,显示菜单,顾客输入订购食物信息,并实现了选购套餐,使用优惠券,满减打折的活动,最后付款找零。
2.UML类图
3、运行结果
4、个人总结
通过这次编程,我学到了如何具体实现接口,如何将商品信息写入文件中,在写文件的函数里,刚开始出了错误,用数组记录订购信息时,没有订购的商品无法给数组元素赋值,就出错了,所以要在写文件的函数中,for循环里用if判断s[i]是否为空,不为空再存入信息。在写文件时,true为继续写入不覆盖,false为覆盖写入。
抽象工厂方法中,根据里氏替换原则,任何接受父类型的地方,都能够接受子类型。
在写具体工厂类时,创建食物的函数中,给Hamburgers类型返回值时用了SpeHumburgers类型,这里用到了子类扩展了父类,子类是一种特殊的父类,子类可以获得父类所有的属性和方法,达到代码复用的目的,子类总以父类为基础增加新的属性和方法。但是有时候我们还需要重写(覆盖)父类的方法。