- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
面向对象程序设计
设计模式论文
姓名:邓鹏辉 班级:软硕4班 学号:M201376109
程序设计目标和使用说明
该程序在eclipse3.2版本中完成,用的是jdk1.5。
该程序的设计目的是为了学习java设计模式,应用其中的少数几个模式编写一个程序,在编写程序的过程中亲身实践相应设计模式,学习体会。该程序的设计目标是完成一个餐厅的经营流程。其中的角色包括消费者,服务员,经理,以及厨房的厨师。
在程序设计中有四个包。
图1-1 项目包
1.client包。
图1-2 Client包文件
其中利用策略模式,对顾客进行划分。让顾客具有各自不同的特点和属性,并且可以在程序运行的时候,利用相关方法进行修改,实现客户在进行时的需求更改。
2.waiter 包。
图1-3 waiter包文件
在waiter包中,是利用观察者模式实现的餐厅服务系统。经理作为subject,然后服务员作为Observer,订阅信息。在信息改变的时候,由经理通知所有的服务员,以便所有的服务员得到最新的信息,在业务方面不会出错。然后由于餐厅厨房里也需要知道菜单信息,以及及时更改的信息。所以将chef也作为订阅者加入到list中,跟服务员一起接收新的信息。
3.kitchen包。包括文件:
图1-4 kitchen包文件
利用模板模式将菜肴加工的过程进行优化,将相同步骤抽象出来。然后又利用简单工厂模板方法来将菜类进行抽象,利用一个例子,将牛肉类进行抽象。
4.myrestaurant包。其中包括main方法。
图1-5 myrestaurant包文件
在该包中,main方法中导入前三个包,进行综合调用。
综合利用之前的各个角色,可以充分模拟餐厅的基本业务。
实例一个晚宴和午餐的客人。他们是根据自己的特点来构造了自己的属性。后来他们又更改了自己选择。然后他们提交点单给经理,经理会同志所有服务员和厨师。厨师会根据自己读到的点单来做菜。
模板及其描述
本程序中综合运用了策略模式,观察者模式,模板模式和工厂模式。下面就四个模式分别进行说明。
策略模式
策略模式(Strategy Pattern)中体现了两个非常基本的面向对象设计的基本原则:封装变化的概念;编程中使用接口,而不是对接口实现。
策略模式属于对象行为型设计模式,主要是定义一系列的算法,把这些算法一个个封装成拥有共同接口的单独的类,并且使它们之间可以互换。策略模式使这些算法在客户端调用它们的时候能够互不影响地变化。这里的算法不要狭义的理解为数据结构中算法,应该理解为不同的业务处理方法。
这种做法会带来什么样的好处呢?
它将算法的使用和算法本身分离,即将变化的具体算法封装了起来,降低了代码的耦合度,系统业务策略的更变仅需少量修改。
算法被提取出来,这样可以使算法得到重用,这种情况还可以考虑使用享元模式来共享算法对象,来减少系统开销(但要注意使用享元模式的建议条件)。
先看看策略模式的结构:要使算法拥有共同的接口,就要实现一个接口或者一个抽象类出来才行。这样结构的轮廓也就出来了,可用简单的类图来表示它们之间的关系:
图2-1 策略模式类图
策略模式由三个角色组成:
算法使用环境角色:算法被引用到这里和一些其它的与环境有关的操作一起来完成任务;
抽象策略角色:规定了所有具体策略角色所需的接口。在java它通常由接口或者抽象类来实现;
具体策略角色:实现了抽象策略角色定义的接口。
图2-2 Client包文件
在此包中,CookingOrder,SweetOrder,DrinkOrder为三个接口,分别用来定义顾客的三个餐饮属性。FiveCooking,SevenCooking,TatalCooking为对接口CookingOrder的实现。SweetOk,SweetNo为对SweetOrder的实现。DrinkTea,DrinkCoffee,DrinkUsquebaugh为对接口DrinkOrder的实现。分别完成对菜式的要求,甜点的要求,和酒水的要求。接口只提供空方法,后面继承类个别实现。举一例:
a)接口SweetOrder
package client;
public interface SweetOrder {
public String sweet();
}
提供一个抽象方法。
b)类SweetOk
package client;
public class SweetOk implements SweetOrder {
public String sweet() {
System.out.println(I want the Sweet);
return I want the Sweet;
}
您可能关注的文档
最近下载
- 2025电动航空器电推进系统动力电机技术规范.docx VIP
- DB37╱T 3655-2019 化工园区大气环境风险监控预警系统技术指南(试行).pdf VIP
- 百灵达FLOW-8快速使用说明书.pptx VIP
- 化工园区危险品运输车辆停车场建设标准.pdf VIP
- 《党政机关厉行节约反对浪费条例》专题党课PPT课件模板.pptx VIP
- T/HGJ 10600-2019 烧碱装置安全设计标准.docx VIP
- 最新清晰版ISO50001(中word版).docx VIP
- 临床医学 《门静脉高压症》教学课件.ppt VIP
- 最新:机械通气患者转运课件.pptx VIP
- (高清版)DB44∕T 2598-2024 《省级体育社会团体建设规范》.pdf VIP
文档评论(0)