模式应用

两种基本模式的实际应用

1.题目分析
本次练习是实现简易的肯德基点餐系统,主要功能是①正常餐品结算和找零。②基本套餐结算和找零。③使用优惠劵购买餐品结算和找零。④可在一定时间段参与店内活动(17:00~21:00有夜宵优惠,可享8折优惠)⑤模拟打印小票的功能(写到文件“小票.txt”中)。
2.初步思路
首先,点餐方式:单点菜品或者选择套餐。单个产品由简单工厂模式产生,在静态工厂方法中,根据不同的参数产生不同种类的食物。套餐由抽象工厂方法产生,创建一个工厂接口,其中包含生产食物的工厂方法,不同的套餐类实现此接口,从而调用工厂方法,实现不同套餐食物的产生。
其次,食物的属性。建立一个食物基类包含每种食物都有的属性,例如单价,食物名,食物生产编号,食物种类选择标志。每个食物类继承该基类,设置自己应有的属性。产品编号用于在静态工厂方法中选择返回的产品实例的类型,在工厂中生成具体产品实例。食物种类选择标志具体用到选择某一具体食物的类型(口味)。
具体点餐操作由顾客挑选菜品,顾客结账时,是否可以领取优惠券(满50减10,满100减25),结账时间是否在优惠期间内组成。最终将顾客点餐记录打印到文件中去。此部分会用到java中的写入文件的方法,计算顾客消费总额需注意,先判断是否在优惠时间类,再进行领取优惠券。
3.具体算法
①建立食物基类food(属性有price(食物单价),name(食物名),foodsign(食物生产编号),choice(具体食物类型选择标志)),hamburger,chipbean等具体食物类继承该类,在自己的构造方法中设置自己的属性,食物的构造方法需包含参数choice,从而设置具体食物不同类型的属性值。例如:汉堡类的构造方法public hamburger(int choice)当生成汉堡实例时,调用含参构造方法,参数choice值为1时产生的时香辣鸡腿堡实例,当值为2时,产生的是牛肉汉堡实例。
②建立食物工厂接口foodfactory,设置静态工厂方法public static food setfood(int choice) ,根据choice参数的不同生成不同的食物实例。例如当choice值为1时生成的时汉堡实例。
③套餐由抽象工厂模式产生,创建一个工厂接口abstractfood,其中包含生产食物的工厂方法public combo produce();套餐1和套餐2的工厂类分别实现该接口,返回对应套餐的对象实例,实现不同套餐食物的产生。
④点餐类order,包含显示菜单方法void menu(),优惠券领取方法int youhuiquan(order r),优惠活动方法static boolean campign(order r).
以及收银系统方法pay(),在pay()方法中包含了顾客选择点餐,计算顾客消费金额,找零,判断用户是否可以参与到优惠活动中,是否可以领取优惠券,并将最终消费情况写入到文件小票.txt中。Campign(order r )方法使用了时间类Date,format()方法:按指定目标格式把Date对象转化为String。parse()方法按照指定的原格式转换为Date对象。
⑤打印小票用到的java写入文件方式:用到了printwriter,据用自动行刷新的缓冲字符输出流,特点是可以按行写出字符串,并且可以自动行刷新。支持两个对文件写操作的构造方法①printwrtier(File f)传文件名,②printwriter(String s)传路径。以上两种方法都支持一个重载。就是在传入一个参数。(参考自风舞松林间的博客)
4.算法实现。
简单工厂方法实现食物单品。
模式应用_第1张图片
模式应用_第2张图片
模式应用_第3张图片
模式应用_第4张图片
模式应用_第5张图片
抽象工厂实现套餐
在这里插入图片描述
模式应用_第6张图片
模式应用_第7张图片
模式应用_第8张图片
模式应用_第9张图片
在这里插入图片描述
收银功能及优惠活动参与
模式应用_第10张图片
模式应用_第11张图片
模式应用_第12张图片
模式应用_第13张图片
5.运行结果
模式应用_第14张图片
模式应用_第15张图片
模式应用_第16张图片

6.总结
通过本次作业我基本掌握了简单工厂模式、抽象工厂模式的相关知识。这两种模式都属于类创建性模式。简单工厂模式是将对象创建和随想本身业务分离,它的优点是无需知道所创建的产品类名,可引入配置文件xml.但其缺点是在增添新的产品时违反了面向对象的开闭原则。抽象工厂模式提供一个创建一系列相关或相互依赖的对象的接口,而无从指定它们具体的类,它的优点是隔离了具体类的生成,使客户端并不需要知道什么被创建。当一个产品中的多个对象被设计一起工作时,它能够保证客户端只是用一个产品族中对象,增加新产品族无需修改。而且我还掌握了Java操作xml文件方式有:①DOM②SAX③DOM4J④JDOM前两种是JAVA官方提供方法,本次实验我用到了DOM对xml文件进行操作。DOM是将整个xml文档中标签看作一个个节点,通过获得节点,来逐个对节点进行操作。在操作过程中需要用到NodeList,Node和NamedNodeMap三个接口,以及Document,DocumentBuliderFactory和DocumentBulider三个类。(具体解析在总结中解释)在本次实验中,我用到了Document中的getElementsByTagName(String)获取包含类名的节点,及Node类的getfirstchlid()得到第一个子节点。java写入文件方式:用到了printwriter,据用自动行刷新的缓冲字符输出流,特点是可以按行写出字符串,并且可以自动行刷新。支持两个对文件写操作的构造方法①printwrtier(File f)传文件名,②printwriter(String s)传路径。以上两种方法都支持一个重载。就是在传入一个参数。(参考自风舞松林间的博客),通过本次练习,我注意到自己Java程序的调试方法不对,所以我通过查询资料改正自己的调试方法。
通过这次作业我得到的感悟是:遇到困难时的心态要平和,冷静地去查找问题并解决问题。注意知识的总结和积累。

你可能感兴趣的:(模式应用)