中南大学软件体系结构实验结构型和行为型设计模式实验(DOC)
UML-软件体系结构-实验2-中南大学-软件学院

实验2 UML实验(2)实验学时: 2每组人数: 1实验类型: 3 (1:基础性2:综合性3:设计性4:研究性)实验要求: 1 (1:必修2:选修3:其它)实验类别: 3 (1:基础2:专业基础3:专业4:其它)一、实验目的1. 学习类图的绘制;2. 学习从系统需求中识别类,并构建相应的面向对象模型;3. 学习使用顺序图描述对象之间的交互;4. 学习使用活动图为业务流程建模;5. 学习使用PowerDesigner实现正向工程和逆向工程。
二、实验内容1. 根据以下描述绘制类图,再正向工程生成Java源代码(也可生成其他面向对象语言的源代码,如C++或C#等):图形(Shape)可分为圆形(Circle)、矩形(Rectangle)、椭圆形(Ellipse)等具体图形,在Shape 类中提供了一个抽象的draw()方法用于绘制图形,而在具体的图形类中实现该抽象draw()方法。
提供一个图形工厂类(ShapeFactory),该类提供一个静态方法createShape(char type),其返回类型为Shape,参数type为所需绘制图形对应的代码,例如“c”表示圆形,“r”表示矩形,“e”表示椭圆形等,在createShape()方法中,可以使用条件语句来判断所需绘制图形的类型,并根据参数的不同返回不同的具体形状对象。
【注:“创建关系”是一种特殊的“依赖关系”】2. 根据以下描述绘制类图:某商场会员管理系统包含一个会员类(Member),会员的基本信息包括会员编号、会员姓名、联系电话、电子邮箱、地址等,会员可分为金卡会员(GoldMember)和银卡会员(SilverMember)两种,不同类型的会员在购物时可以享受不同的折扣;每个会员可以拥有一个或多个订单(Order),每一个订单又可以包含至少一条商品销售信息(ProductItem),商品销售信息包括订单编号、商品编号、商品数量、商品单价和折扣等;每一条商品销售信息对应一类商品(Product),商品信息包括商品编号、商品名称、商品单价、商品库存量、商品产地等。
【精品实验报告】软件体系结构设计模式实验报告

【精品实验报告】软件体系结构设计模式实验报告软件体系结构设计模式实验报告学生姓名: 所在学院: 学生学号: 学生班级: 指导老师: 完成日期:一、实验目的熟练使用PowerDesigner和任意一种面向对象编程语言实现几种常见的设计模式,包括组合模式、外观模式、代理模式、观察者模式和策略模式,理解每一种设计模式的模式动机,掌握模式结构,学习如何使用代码实现这些模式,并学会分析这些模式的使用效果。
二、实验内容使用PowerDesigner和任意一种面向对象编程语言实现组合模式、外观模式、代理模式、观察者模式和策略模式,包括根据实例绘制模式结构图、编写模式实例实现代码,运行并测试模式实例代码。
(1) 组合模式使用组合模式设计一个杀毒软件(AntiVirus)的框架,该软件既可以对某个文件夹(Folder)杀毒,也可以对某个指定的文件(File)进行杀毒,文件种类包括文本文件TextFile、图片文件ImageFile、视频文件VideoFile。
绘制类图并编程模拟实现。
(2) 组合模式某教育机构组织结构如下图所示:北京总部教务办公室湖南分校行政办公室教务办公室长沙教学点湘潭教学点行政办公室教务办公室行政办公室教务办公室行政办公室在该教育机构的OA系统中可以给各级办公室下发公文,现采用组合模式设计该机构的组织结构,绘制相应的类图并编程模拟实现,在客户端代码中模拟下发公文。
(注:可以定义一个办公室类为抽象叶子构件类,再将教务办公室和行政办公室作为其子类;可以定义一个教学机构类为抽象容器构件类,将总部、分校和教学点作为其子类。
)(3) 外观模式某系统需要提供一个文件加密模块,加密流程包括三个操作,分别是读取源文件、加密、保存加密之后的文件。
读取文件和保存文件使用流来实现,这三个操作相对独立,其业务代码封装在三个不同的类中。
现在需要提供一个统一的加密外观类,用户可以直接使用该加密外观类完成文件的读取、加密和保存三个操作,而不需要与每一个类进行交互,使用外观模式设计该加密模块,要求编程模拟实现。
中南大学软件体系结构实验3-创建型设计模式实验

实验3 创建型设计模式实验实验学时: 2每组人数: 1实验类型: 3 (1:基础性 2:综合性 3:设计性 4:研究性)实验要求: 1 (1:必修 2:选修 3:其它)实验类别: 3 (1:基础 2:专业基础 3:专业 4:其它)一、实验目的1.熟练使用面向对象设计原则对系统进行重构;2.熟练使用PowerDesigner和任意一种面向对象编程语言实现几种常见的创建型设计模式,包括简单工厂模式、工厂方法模式、抽象工厂模式和单例模式,理解每一种设计模式的模式动机,掌握模式结构,学习如何使用代码实现这些模式。
二、实验内容1.在某图形库API中提供了多种矢量图模板,用户可以基于这些矢量图创建不同的显示图形,图形库设计人员设计的初始类图如下所示:Circle+ + + + +init ()setColor ()fill ()setSize ()display ()...: void: void: void: void: voidTriangle+++++init ()setColor ()fill ()setSize ()display ()...: void: void: void: void: voidRectangle+++++init ()setColor ()fill ()setSize ()display ()...: void: void: void: void: voidClient在该图形库中,每个图形类(如Circle、Triangle等)的init()方法用于初始化所创建的图形, setColor()方法用于给图形设置边框颜色,fill()方法用于给图形设置填充颜色,setSize()方法用于设置图形的大小,display()方法用于显示图形。
客户类(Client)在使用该图形库时发现存在如下问题:①由于在创建窗口时每次只需要使用图形库中的一种图形,因此在更换图形时需要修改客户类源代码;②在图形库中增加并使用新的图形时需要修改客户类源代码;③客户类在每次使用图形对象之前需要先创建图形对象,有些图形的创建过程较为复杂,导致客户类代码冗长且难以维护。
中南大学软件体系结构UML实验

实验1 UML实验实验学时: 4每组人数: 1实验类型: 3 (1:基础性2:综合性3:设计性4:研究性)实验要求: 1 (1:必修2:选修3:其它)实验类别: 3 (1:基础2:专业基础3:专业4:其它)一、实验目的1. 学会安装和使用建模工具PowerDesigner,熟练使用PowerDesigner绘制常用的UML 图形,熟悉常用的UML符号;2. 构建用例模型来描述软件需求,包括绘制用例图,撰写用例文档并制作用例检查矩阵;3. 学习使用状态图描述对象的状态及转换;4. 学习使用活动图为业务流程建模;5. 学习使用顺序图描述对象之间的交互;6. 学习类图的绘制;7. 学习从系统需求中识别类,并构建相应的面向对象模型;8. 学习使用PowerDesigner实现正向工程和逆向工程。
二、实验内容1. 某酒店订房系统描述如下:(1) 顾客可以选择在线预订,也可以直接去酒店通过前台服务员预订;(2) 前台服务员可以利用系统直接在前台预订房间;(3) 不管采用哪种预订方式,都需要在预订时支付相应订金;(4) 前台预订可以通过现金或信用卡的形式进行订金支付,但是网上预订只能通过信用卡进行支付;(5) 利用信用卡进行支付时需要和信用卡系统进行通信;(6) 客房部经理可以随时查看客房预订情况和每日收款情况。
绘制该酒店订房系统的用例图。
2. 根据以下场景绘制用例图:某企业为了方便员工用餐,为企业餐厅开发了一个订餐系统(COS:Cafeteria Ordering System),企业员工可通过企业内联网使用该系统。
该系统功能描述如下:(1) 企业的任何员工都可以查看菜单和今日特价;(2) 系统的顾客是注册到系统的员工,可以在线订餐(以下操作均需先登录)、注册工资支付、修改订餐信息和删除订餐信息,在注册工资支付时需要通过工资系统进行身份验证;(3) 餐厅员工是特殊的顾客,可以进行备餐(系统记录备餐信息)、生成付费请求和请求送餐,其中对于注册使用工资支付的顾客生成付费请求并发送给工资系统;(4) 菜单管理员是餐厅员工的一种,可以管理菜单;(5) 送餐员也是餐厅员工的一种,可以打印送餐说明、记录送餐信息(如送餐时间)以及记录收费(对于没有注册工资支付的顾客,由送餐员收取现金后记录)。
中南大学软件学院软件体系结构实验1-UML实验-参考答案教学教材

《UML实验》参考答案1. 某酒店订房系统描述如下:(1) 顾客可以选择在线预订,也可以直接去酒店通过前台服务员预订;(2) 前台服务员可以利用系统直接在前台预订房间;(3) 不管采用哪种预订方式,都需要在预订时支付相应订金;(4) 前台预订可以通过现金或信用卡的形式进行订金支付,但是网上预订只能通过信用卡进行支付;(5) 利用信用卡进行支付时需要和信用卡系统进行通信;(6) 客房部经理可以随时查看客房预订情况和每日收款情况。
绘制该酒店订房系统的用例图。
参考答案:顾客在线预订房间前台预订房间通过现金支付订金通过信用卡支付订金查看客房预订情况查看每日收款情况2. 根据以下场景绘制用例图:某企业为了方便员工用餐,为企业餐厅开发了一个订餐系统(COS:Cafeteria Ordering System),企业员工可通过企业内联网使用该系统。
该系统功能描述如下:(1) 企业的任何员工都可以查看菜单和今日特价;(2) 系统的顾客是注册到系统的员工,可以在线订餐(以下操作均需先登录)、注册工资支付、修改订餐信息和删除订餐信息,在注册工资支付时需要通过工资系统进行身份验证;(3) 餐厅员工是特殊的顾客,可以进行备餐(系统记录备餐信息)、生成付费请求和请求送餐,其中对于注册使用工资支付的顾客生成付费请求并发送给工资系统;(4) 菜单管理员是餐厅员工的一种,可以管理菜单;(5) 送餐员也是餐厅员工的一种,可以打印送餐说明、记录送餐信息(如送餐时间)以及记录收费(对于没有注册工资支付的顾客,由送餐员收取现金后记录)。
参考答案:<<include>>查看菜单查看今日特价在线订餐注册工资支付修改订餐信息删除订餐信息工资系统备餐生成付费请求请求送餐管理菜单打印送餐说明记录送餐信息记录收费注册登录3. 根据以下场景绘制用例图:某公司需开发一个反馈处理系统作为其CRM的一部分。
系统基本功能描述如下:(1) 客户可通过系统发布反馈信息;(2) 公司客户关系(CR)部门员工也可以在系统中记录反馈信息;(3) 业务部门的主管和员工均能看到本部门的反馈信息,但只有CR部门员工拥有修改与删除反馈的权限;(4) 对于部分需要调查以便验证其真实性并需要做相关处理的反馈信息,业务部门主管有权通过系统安排本部门员工调查及处理该反馈;(5) 反馈调查与处理完毕后,负责调查的员工可通过系统输入反馈的详细情况;(6) 公司高层可查看未决反馈统计报表和各业务部门的反馈统计报表;(7) 所有人员进入本系统需先登录。
中南大学软件学院软件体系结构实验1-UML实验-参考答案

《UML实验》参考答案1. 某酒店订房系统描述如下:(1) 顾客可以选择在线预订,也可以直接去酒店通过前台服务员预订;(2) 前台服务员可以利用系统直接在前台预订房间;(3) 不管采用哪种预订方式,都需要在预订时支付相应订金;(4) 前台预订可以通过现金或信用卡的形式进行订金支付,但是网上预订只能通过信用卡进行支付;(5) 利用信用卡进行支付时需要和信用卡系统进行通信;(6) 客房部经理可以随时查看客房预订情况和每日收款情况。
绘制该酒店订房系统的用例图。
参考答案:顾客在线预订房间前台预订房间前台服务员客房部经理通过现金支付订金通过信用卡支付订金查看客房预订情况查看每日收款情况信用卡系统2. 根据以下场景绘制用例图:某企业为了方便员工用餐,为企业餐厅开发了一个订餐系统(COS:Cafeteria Ordering System),企业员工可通过企业内联网使用该系统。
该系统功能描述如下:(1) 企业的任何员工都可以查看菜单和今日特价;(2) 系统的顾客是注册到系统的员工,可以在线订餐(以下操作均需先登录)、注册工资支付、修改订餐信息和删除订餐信息,在注册工资支付时需要通过工资系统进行身份验证;(3) 餐厅员工是特殊的顾客,可以进行备餐(系统记录备餐信息)、生成付费请求和请求送餐,其中对于注册使用工资支付的顾客生成付费请求并发送给工资系统;(4) 菜单管理员是餐厅员工的一种,可以管理菜单;(5) 送餐员也是餐厅员工的一种,可以打印送餐说明、记录送餐信息(如送餐时间)以及记录收费(对于没有注册工资支付的顾客,由送餐员收取现金后记录)。
参考答案:<<include>>查看菜单查看今日特价在线订餐注册工资支付修改订餐信息删除订餐信息工资系统备餐生成付费请求请求送餐管理菜单打印送餐说明记录送餐信息记录收费注册登录3. 根据以下场景绘制用例图:某公司需开发一个反馈处理系统作为其CRM 的一部分。
中南大学软件体系结构实验3-创建型设计模式实验

实验3 创建型设计模式实验实验学时: 2每组人数: 1实验类型: 3 (1:基础性 2:综合性 3:设计性 4:研究性)实验要求: 1 (1:必修 2:选修 3:其它)实验类别: 3 (1:基础 2:专业基础 3:专业 4:其它)一、实验目的1.熟练使用面向对象设计原则对系统进行重构;2.熟练使用PowerDesigner和任意一种面向对象编程语言实现几种常见的创建型设计模式,包括简单工厂模式、工厂方法模式、抽象工厂模式和单例模式,理解每一种设计模式的模式动机,掌握模式结构,学习如何使用代码实现这些模式。
二、实验内容1.在某图形库API中提供了多种矢量图模板,用户可以基于这些矢量图创建不同的显示图形,图形库设计人员设计的初始类图如下所示:Circle+ + + + +init ()setColor ()fill ()setSize ()display ()...: void: void: void: void: voidTriangle+++++init ()setColor ()fill ()setSize ()display ()...: void: void: void: void: voidRectangle+++++init ()setColor ()fill ()setSize ()display ()...: void: void: void: void: voidClient在该图形库中,每个图形类(如Circle、Triangle等)的init()方法用于初始化所创建的图形, setColor()方法用于给图形设置边框颜色,fill()方法用于给图形设置填充颜色,setSize()方法用于设置图形的大小,display()方法用于显示图形。
客户类(Client)在使用该图形库时发现存在如下问题:①由于在创建窗口时每次只需要使用图形库中的一种图形,因此在更换图形时需要修改客户类源代码;②在图形库中增加并使用新的图形时需要修改客户类源代码;③客户类在每次使用图形对象之前需要先创建图形对象,有些图形的创建过程较为复杂,导致客户类代码冗长且难以维护。
中南大学软件体系结构实验报告一

实验1 UML实验(1)实验学时: 2每组人数: 1实验类型: 3 (1:基础性2:综合性3:设计性4:研究性)实验要求: 1 (1:必修2:选修3:其它)实验类别: 3 (1:基础2:专业基础3:专业4:其它)一、实验目的1.学会安装和使用建模工具PowerDesigner,熟练使用PowerDesigner绘制常用的UML 图形,熟悉常用的UML符号;2.构建用例模型来描述软件需求,包括绘制用例图,撰写用例文档并制作用例检查矩阵;3. 绘制状态图描述对象的状态及转换。
二、实验内容1. 某酒店订房系统描述如下:(1) 顾客可以选择在线预订,也可以直接去酒店通过前台服务员预订;(2) 前台服务员可以利用系统直接在前台预订房间;(3) 不管采用哪种预订方式,都需要在预订时支付相应订金;(4) 前台预订可以通过现金或信用卡的形式进行订金支付,但是网上预订只能通过信用卡进行支付;(5) 利用信用卡进行支付时需要和信用卡系统进行通信;(6) 客房部经理可以随时查看客房预订情况和每日收款情况。
绘制该酒店订房系统的用例图。
2. 根据以下场景绘制用例图:某企业为了方便员工用餐,为企业餐厅开发了一个订餐系统(COS:Cafeteria Ordering System),企业员工可通过企业内联网使用该系统。
该系统功能描述如下:(1) 企业的任何员工都可以查看菜单和今日特价;(2) 系统的顾客是注册到系统的员工,可以在线订餐(以下操作均需先登录)、注册工资支付、修改订餐信息和删除订餐信息,在注册工资支付时需要通过工资系统进行身份验证;(3) 餐厅员工是特殊的顾客,可以进行备餐(系统记录备餐信息)、生成付费请求和请求送餐,其中对于注册使用工资支付的顾客生成付费请求并发送给工资系统;(4) 菜单管理员是餐厅员工的一种,可以管理菜单;(5) 送餐员也是餐厅员工的一种,可以打印送餐说明、记录送餐信息(如送餐时间)以及记录收费(对于没有注册工资支付的顾客,由送餐员收取现金后记录)。
中南大学软件学院软件体系结构实验1-UML实验-参考答案教学教材

《UML实验》参考答案1. 某酒店订房系统描述如下:(1) 顾客可以选择在线预订,也可以直接去酒店通过前台服务员预订;(2) 前台服务员可以利用系统直接在前台预订房间;(3) 不管采用哪种预订方式,都需要在预订时支付相应订金;(4) 前台预订可以通过现金或信用卡的形式进行订金支付,但是网上预订只能通过信用卡进行支付;(5) 利用信用卡进行支付时需要和信用卡系统进行通信;(6) 客房部经理可以随时查看客房预订情况和每日收款情况。
绘制该酒店订房系统的用例图。
参考答案:顾客在线预订房间前台预订房间通过现金支付订金通过信用卡支付订金查看客房预订情况查看每日收款情况2. 根据以下场景绘制用例图:某企业为了方便员工用餐,为企业餐厅开发了一个订餐系统(COS:Cafeteria Ordering System),企业员工可通过企业内联网使用该系统。
该系统功能描述如下:(1) 企业的任何员工都可以查看菜单和今日特价;(2) 系统的顾客是注册到系统的员工,可以在线订餐(以下操作均需先登录)、注册工资支付、修改订餐信息和删除订餐信息,在注册工资支付时需要通过工资系统进行身份验证;(3) 餐厅员工是特殊的顾客,可以进行备餐(系统记录备餐信息)、生成付费请求和请求送餐,其中对于注册使用工资支付的顾客生成付费请求并发送给工资系统;(4) 菜单管理员是餐厅员工的一种,可以管理菜单;(5) 送餐员也是餐厅员工的一种,可以打印送餐说明、记录送餐信息(如送餐时间)以及记录收费(对于没有注册工资支付的顾客,由送餐员收取现金后记录)。
参考答案:<<include>>查看菜单查看今日特价在线订餐注册工资支付修改订餐信息删除订餐信息工资系统备餐生成付费请求请求送餐管理菜单打印送餐说明记录送餐信息记录收费注册登录3. 根据以下场景绘制用例图:某公司需开发一个反馈处理系统作为其CRM的一部分。
系统基本功能描述如下:(1) 客户可通过系统发布反馈信息;(2) 公司客户关系(CR)部门员工也可以在系统中记录反馈信息;(3) 业务部门的主管和员工均能看到本部门的反馈信息,但只有CR部门员工拥有修改与删除反馈的权限;(4) 对于部分需要调查以便验证其真实性并需要做相关处理的反馈信息,业务部门主管有权通过系统安排本部门员工调查及处理该反馈;(5) 反馈调查与处理完毕后,负责调查的员工可通过系统输入反馈的详细情况;(6) 公司高层可查看未决反馈统计报表和各业务部门的反馈统计报表;(7) 所有人员进入本系统需先登录。
中南大学软件学院软件体系结构实验1-UML实验-参考答案

《UML实验》参考答案1. 某酒店订房系统描述如下:(1) 顾客可以选择在线预订,也可以直接去酒店通过前台服务员预订;(2) 前台服务员可以利用系统直接在前台预订房间;(3) 不管采用哪种预订方式,都需要在预订时支付相应订金;(4) 前台预订可以通过现金或信用卡的形式进行订金支付,但是网上预订只能通过信用卡进行支付;(5) 利用信用卡进行支付时需要和信用卡系统进行通信;(6) 客房部经理可以随时查看客房预订情况和每日收款情况。
绘制该酒店订房系统的用例图。
参考答案:顾客在线预订房间前台预订房间前台服务员客房部经理通过现金支付订金通过信用卡支付订金查看客房预订情况查看每日收款情况信用卡系统2. 根据以下场景绘制用例图:某企业为了方便员工用餐,为企业餐厅开发了一个订餐系统(COS:Cafeteria Ordering System),企业员工可通过企业内联网使用该系统。
该系统功能描述如下:(1) 企业的任何员工都可以查看菜单和今日特价;(2) 系统的顾客是注册到系统的员工,可以在线订餐(以下操作均需先登录)、注册工资支付、修改订餐信息和删除订餐信息,在注册工资支付时需要通过工资系统进行身份验证;(3) 餐厅员工是特殊的顾客,可以进行备餐(系统记录备餐信息)、生成付费请求和请求送餐,其中对于注册使用工资支付的顾客生成付费请求并发送给工资系统;(4) 菜单管理员是餐厅员工的一种,可以管理菜单;(5) 送餐员也是餐厅员工的一种,可以打印送餐说明、记录送餐信息(如送餐时间)以及记录收费(对于没有注册工资支付的顾客,由送餐员收取现金后记录)。
参考答案:<<include>>查看菜单查看今日特价在线订餐注册工资支付修改订餐信息删除订餐信息工资系统备餐生成付费请求请求送餐管理菜单打印送餐说明记录送餐信息记录收费注册登录3. 根据以下场景绘制用例图:某公司需开发一个反馈处理系统作为其CRM 的一部分。
中南大学软件学院软件体系结构实验1-UML实验-参考答案

《UML实验》参考答案1. 某酒店订房系统描述如下:(1) 顾客可以选择在线预订,也可以直接去酒店通过前台服务员预订;(2) 前台服务员可以利用系统直接在前台预订房间;(3) 不管采用哪种预订方式,都需要在预订时支付相应订金;(4) 前台预订可以通过现金或信用卡的形式进行订金支付,但是网上预订只能通过信用卡进行支付;(5) 利用信用卡进行支付时需要和信用卡系统进行通信;(6) 客房部经理可以随时查看客房预订情况和每日收款情况。
绘制该酒店订房系统的用例图。
参考答案:顾客在线预订房间前台预订房间通过现金支付订金通过信用卡支付订金查看客房预订情况查看每日收款情况2. 根据以下场景绘制用例图:某企业为了方便员工用餐,为企业餐厅开发了一个订餐系统(COS:Cafeteria Ordering System),企业员工可通过企业内联网使用该系统。
该系统功能描述如下:(1) 企业的任何员工都可以查看菜单和今日特价;(2) 系统的顾客是注册到系统的员工,可以在线订餐(以下操作均需先登录)、注册工资支付、修改订餐信息和删除订餐信息,在注册工资支付时需要通过工资系统进行身份验证;(3) 餐厅员工是特殊的顾客,可以进行备餐(系统记录备餐信息)、生成付费请求和请求送餐,其中对于注册使用工资支付的顾客生成付费请求并发送给工资系统;(4) 菜单管理员是餐厅员工的一种,可以管理菜单;(5) 送餐员也是餐厅员工的一种,可以打印送餐说明、记录送餐信息(如送餐时间)以及记录收费(对于没有注册工资支付的顾客,由送餐员收取现金后记录)。
参考答案:<<include>>查看菜单查看今日特价在线订餐注册工资支付修改订餐信息删除订餐信息工资系统备餐生成付费请求请求送餐管理菜单打印送餐说明记录送餐信息记录收费注册登录3. 根据以下场景绘制用例图:某公司需开发一个反馈处理系统作为其CRM的一部分。
系统基本功能描述如下:(1) 客户可通过系统发布反馈信息;(2) 公司客户关系(CR)部门员工也可以在系统中记录反馈信息;(3) 业务部门的主管和员工均能看到本部门的反馈信息,但只有CR部门员工拥有修改与删除反馈的权限;(4) 对于部分需要调查以便验证其真实性并需要做相关处理的反馈信息,业务部门主管有权通过系统安排本部门员工调查及处理该反馈;(5) 反馈调查与处理完毕后,负责调查的员工可通过系统输入反馈的详细情况;(6) 公司高层可查看未决反馈统计报表和各业务部门的反馈统计报表;(7) 所有人员进入本系统需先登录。
中南大学软件体系结构实验4-结构型设计模式实验

实验4 结构型设计模式实验实验学时: 2每组人数: 1实验类型: 3 (1:基础性 2:综合性 3:设计性 4:研究性)实验要求: 1 (1:必修 2:选修 3:其它)实验类别: 3 (1:基础 2:专业基础 3:专业 4:其它)一、实验目的熟练使用PowerDesigner和任意一种面向对象编程语言实现几种常见的结构型设计模式,包括适配器模式、组合模式和外观模式,理解每一种设计模式的模式动机,掌握模式结构,学习如何使用代码实现这些模式。
二、实验内容1. 现有一个接口DataOperation定义了排序方法sort(int[]) 和查找方法search(int[], int),已知类QuickSort的quickSort(int[])方法实现了快速排序算法,类BinarySearch 的binarySearch(int[], int)方法实现了二分查找算法。
试使用适配器模式设计一个系统,在不修改源代码的情况下将类QuickSort和类BinarySearch的方法适配到DataOperation接口中。
绘制类图并编程实现。
(要求实现快速排序和二分查找,使用对象适配器实现)2. Windows Media Player和RealPlayer是两种常用的媒体播放器,它们的API结构和调用方法存在区别。
现在你的应用程序需要支持这两种播放器API,而且在将来可能还需要支持新的媒体播放器,请问如何设计该应用程序绘制类图并编程模拟实现。
3. 使用组合模式设计一个杀毒软件(AntiVirus)的框架,该软件既可以对某个文件夹(Folder)杀毒,也可以对某个指定的文件(File)进行杀毒,文件种类包括文本文件TextFile、图片文件ImageFile、视频文件VideoFile。
绘制类图并编程模拟实现。
4. 某教育机构组织结构如下图所示:在该教育机构的OA系统中可以给各级办公室下发公文,试采用组合模式设计该机构的组织结构,绘制相应的类图并编程模拟实现,在客户端代码中模拟下发公文。
(完整word)设计模式-软件体系结构-实验6-中南大学-软件学院

实验6 行为型设计模式实验实验学时: 2每组人数: 1实验类型: 3 (1:基础性 2:综合性 3:设计性 4:研究性)实验要求: 1 (1:必修 2:选修 3:其它)实验类别: 3 (1:基础 2:专业基础 3:专业 4:其它)一、实验目的熟练使用PowerDesigner和任意一种面向对象编程语言实现几种常见的行为型设计模式,包括观察者模式和策略模式,理解每一种设计模式的模式动机,掌握模式结构,学习如何使用代码实现这些模式。
二、实验内容1. 某实时在线股票软件需要提供如下功能:当股票购买者所购买的某支股票价格变化幅度达到5%时,系统将自动发送通知(包括新价格)给购买该股票的所有股民。
试使用观察者模式设计并实现该系统,要求绘制相应的类图并编程模拟实现。
2. 某公司欲开发一套机房监控系统,如果机房达到某一指定温度,温度传感器(Thermosensor)将自动传递信号给各种响应设备,例如警示灯(CautionLight)将闪烁(flicker())、报警器(Annunciator)将发出警报(alarm())、安全逃生门(SecurityDoor)将自动开启(open())、隔热门(InsulatedDoor)将自动关闭(close())等,每一种响应设备的行为由专门的程序来控制。
为了将来能够方便地引入新类型的响应设备,采用观察者模式和适配器模式设计并模拟实现该系统。
3. 某软件公司为某电影院开发了一套影院售票系统,在该系统中需要为不同类型的用户提供不同的电影票(MovieTicket)打折(Discount)方式,具体打折方案如下:(1)学生凭学生证可享受票价8折优惠;(2)年龄在10周岁及以下的儿童可享受每张票减免10元的优惠(原始票价需大于等于20元);(3)影院VIP用户除享受票价半价优惠外还可进行积分,积分累计到一定额度可换取电影院赠送的奖品。
该系统在将来可能还要根据需要引入新的打折方式。
中南大学软件体系结构实验五解读

实验5 结构型和行为型设计模式实验实验学时: 2每组人数: 1实验类型: 3 (1:基础性2:综合性3:设计性4:研究性)实验要求: 1 (1:必修2:选修3:其它)实验类别: 3 (1:基础2:专业基础3:专业4:其它)一、实验目的熟练使用PowerDesigner和任意一种面向对象编程语言实现几种常见的结构型和行为型设计模式,包括代理模式、职责链模式和命令模式,理解每一种设计模式的模式动机,掌握模式结构,学习如何使用代码实现这些模式。
二、实验内容1. 在某应用软件中需要记录业务方法的调用日志,在不修改现有业务类的基础上为每一个类提供一个日志记录代理类,在代理类中输出日志,例如在业务方法method()调用之前输出“方法method()被调用,调用时间为2014-11-5 10:10:10”,调用之后如果没有抛异常则输出“方法method()调用成功”,否则输出“方法method()调用失败”。
在代理类中调用真实业务类的业务方法,使用代理模式设计该日志记录模块的结构,绘制类软图并编程模拟实现。
2. 某软件公司承接了某信息咨询公司的收费商务信息查询系统的开发任务,该系统的基本需求如下:(1) 在进行商务信息查询之前用户需要通过身份验证,只有合法用户才能够使用该查询系统;(2) 在进行商务信息查询时系统需要记录查询日志,以便根据查询次数收取查询费用。
该软件公司开发人员已完成了商务信息查询模块的开发任务,现希望能够以一种松耦合的方式向原有系统增加身份验证和日志记录功能,客户端代码可以无区别地对待原始的商务信息查询模块和增加新功能之后的商务信息查询模块,而且可能在将来还要在该信息查询模块中增加一些新的功能。
试使用代理模式设计并编程模拟实现该收费商务信息查询系统。
【提示:使用保护代理和智能引用代理】3. 某企业的SCM(Supply Chain Management,供应链管理)系统中包含一个采购审批子系统。
中南大学软件学院软件体系结构实验1-UML实验-参考答案

《UML实验》参考答案1. 某酒店订房系统描述如下:(1) 顾客可以选择在线预订,也可以直接去酒店通过前台服务员预订;(2) 前台服务员可以利用系统直接在前台预订房间;(3) 不管采用哪种预订方式,都需要在预订时支付相应订金;(4) 前台预订可以通过现金或信用卡的形式进行订金支付,但是网上预订只能通过信用卡进行支付;(5) 利用信用卡进行支付时需要和信用卡系统进行通信;(6) 客房部经理可以随时查看客房预订情况和每日收款情况。
绘制该酒店订房系统的用例图。
参考答案:顾客在线预订房间前台预订房间前台服务员客房部经理通过现金支付订金通过信用卡支付订金查看客房预订情况查看每日收款情况信用卡系统2. 根据以下场景绘制用例图:某企业为了方便员工用餐,为企业餐厅开发了一个订餐系统(COS:Cafeteria Ordering System),企业员工可通过企业内联网使用该系统。
该系统功能描述如下:(1) 企业的任何员工都可以查看菜单和今日特价;(2) 系统的顾客是注册到系统的员工,可以在线订餐(以下操作均需先登录)、注册工资支付、修改订餐信息和删除订餐信息,在注册工资支付时需要通过工资系统进行身份验证;(3) 餐厅员工是特殊的顾客,可以进行备餐(系统记录备餐信息)、生成付费请求和请求送餐,其中对于注册使用工资支付的顾客生成付费请求并发送给工资系统;(4) 菜单管理员是餐厅员工的一种,可以管理菜单;(5) 送餐员也是餐厅员工的一种,可以打印送餐说明、记录送餐信息(如送餐时间)以及记录收费(对于没有注册工资支付的顾客,由送餐员收取现金后记录)。
参考答案:<<include>>查看菜单查看今日特价在线订餐注册工资支付修改订餐信息删除订餐信息工资系统备餐生成付费请求请求送餐管理菜单打印送餐说明记录送餐信息记录收费注册登录3. 根据以下场景绘制用例图:某公司需开发一个反馈处理系统作为其CRM 的一部分。
中南大学软件体系结构重点

第一章软件体系结构概述(5分)一、软件体系结构的定义●国内普遍接受的定义:软件体系结构包括构件、连接件和约束,它是可预制和可重构的软件框架结构。
●软件体系结构= 构件+ 连接件+ 约束二、软件体系结构的优势●容易理解●重用●控制成本●可分析性第二章软件体系结构风格(10分)一、软件体系结构风格定义●软件体系结构风格是描述某一特定应用领域中系统组织方式的惯用模式.An architectural style defines a family of systems in terms of a pattern of structuralorganization。
●体系结构风格定义了一个系统家族,即一个体系结构定义一个词汇表和一组约束。
词汇表中包含一些构件和连接件类型,而这组约束指出系统是如何将这些构件和连接件组合起来的。
An architectural style defines a vocabulary of components and connector types, and aset of constraints on how they can be combined。
二、常见的体系结构风格●管道和过滤器➢每个构件都有一组输入和输出,构件读输入的数据流,经过内部处理,然后产生输出数据流。
➢过滤器风格的连接件就像是数据流传输的管道,将一个过滤器的输出传到另一个过滤器的输入。
●数据抽象和面向对象组织➢数据的表示方法和它们的相应操作被封装在一个抽象数据类型或对象中.➢这种风格的构件是对象或者说是抽象数据类型的实例。
➢对象通过函数和过程的调用来进行交互。
●基于事件的隐式调用➢构件不直接调用一个过程,而是触发或广播一个或多个事件。
➢事件的触发者并不知道哪些构件会被这些事件影响。
●分层系统➢组织成一个层次结构。
➢每一层都为上一层提供了相应的服务,并且接受下一层提供的服务。
●仓库系统➢构件:中心数据结构(仓库)和一些独立构件的集合。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
中南大学软件体系结构实验结构型和行为型设计模式实验(DOC)《软件体系结构》实验报告项目名称结构型和行为型设计模式专业班级学号实验成绩:批阅教师:年月日1实验5 结构型和行为型设计模式实验实验学时: 2每组人数: 1实验类型: 3 (1:基础性 2:综合性 3:设计性 4:研究性,实验要求: 1 (1:必修 2:选修 3:其它,实验类别: 3 (1:基础 2:专业基础 3:专业 4:其它,一、实验目的熟练使用PowerDesigner和任意一种面向对象编程语言实现几种常见的结构型和行为型设计模式,包括代理模式、职责链模式和命令模式,理解每一种设计模式的模式动机,掌握模式结构,学习如何使用代码实现这些模式。
二、实验内容1. 在某应用软件中需要记录业务方法的调用日志,在不修改现有业务类的基础上为每一个类提供一个日志记录代理类,在代理类中输出日志,例如在业务方法method()调用之前输出“方法method()被调用,调用时间为2014-11-510:10:10”,调用之后如果没有抛异常则输出“方法method()调用成功”,否则输出“方法method()调用失败”。
在代理类中调用真实业务类的业务方法,使用代理模式设计该日志记录模块的结构,绘制类图并编程模拟实现。
2. 某软件公司承接了某信息咨询公司的收费商务信息查询系统的开发任务,该系统的基本需求如下:(1) 在进行商务信息查询之前用户需要通过身份验证,只有合法用户才能够使用该查询系统;(2) 在进行商务信息查询时系统需要记录查询日志,以便根据查询次数收取查询费用。
该软件公司开发人员已完成了商务信息查询模块的开发任务,现希望能够以一种松耦合的方式向原有系统增加身份验证和日志记录功能,客户端代码可以无区别地对待原始的商务信息查询模块和增加新功能之后的商务信息查询模块,而且可能在将来还要在该信息查询模块中增加一些新的功能。
试使用代理模式设计并编程模拟实现该收费商务信息查询系统。
【提示:使用保护代理和智能引用代理】3. 某企业的SCM(Supply Chain Management,供应链管理)系统中包含一个采购审批子系统。
该企业的采购审批是分级进行的,即根据采购金额的不同由不同层次的主管人员来审批,主任可以审批5万元以下(不包括5万元)的采购单,副董事长可以审批5万元至10万元(不包括10万元)的采购单,董事长可以审批10万元至50万元(不包括50万元)的采购单,50万元及以上的采购单就需要开董事会讨论决定。
如下图所示:25万元?金额,10万元金额?50万元金额,5万元10万元?金额,50万元采购单采购人员副董事长董事长董事会主任试使用职责链模式设计并实现该系统。
4. 某公司欲开发一个软件系统的在线文档帮助系统,用户可以在任何一个查询上下文中输入查询关键字,如果当前查询环境下没有相关内容,则系统会将查询按照一定的顺序转发给其他查询环境。
基于上述需求,试采用职责链模式对该系统进行设计。
5. 房间中的开关就是命令模式的一个实例,现用命令模式来模拟开关的功能,可控制对象包括电灯和电风扇,绘制相应的类图并编程模拟实现。
6. 某软件公司欲开发一个基于Windows平台的公告板系统。
系统提供一个主菜单(Menu),在主菜单中包含了一些菜单项(MenuItem),可以通过Menu类的addMenuItem()方法增加菜单项。
菜单项的主要方法是click(),每一个菜单项包含一个抽象命令类,具体命令类包括OpenCommand(打开命令),CreateCommand(新建命令),EditCommand(编辑命令)等,命令类具有一个execute()方法,用于调用公告板系统界面类(BoardScreen)的open()、create()、edit()等方法。
现使用命令模式设计该系统,使得MenuItem类与BoardScreen类的耦合度降低,绘制类图并编程实现。
三、实验要求1. 结合实例,正确无误地绘制代理模式、职责链模式和命令模式的模式结构图;2. 使用任意一种面向对象编程语言实现代理模式、职责链模式和命令模式实例,代码运行正确无误。
四、实验步骤1. 结合实例,使用PowerDesigner绘制代理模式实例结构图并用面向对象编程语言实现该模式实例;2. 结合实例,使用PowerDesigner绘制代理模式实例结构图并用面向对象编程语言实现该模式实例;3. 结合实例,使用PowerDesigner绘制职责链模式实例结构图并用面向对象编程语言实现该模式实例;4. 结合实例,使用PowerDesigner绘制职责链模式实例结构图并用面向对象编程语言实现该模式实例;35. 结合实例,使用PowerDesigner绘制命令模式实例结构图并用面向对象编程语言实现该模式实例;6. 结合实例,使用PowerDesigner绘制命令模式实例结构图并用面向对象编程语言实现该模式实例。
五、实验结果1. 类图:实现代码:/******************************************************************* ***** Module: Business.java* Author: ct* Purpose: Defines the Class Business******************************************************************** ***/import java.util.*;4/** @pdOid a9535497-86cf-4f72-be08-0ed3bbeae5d8 */ public class Business implements Subject {/** @pdOid cc6eaf96-daeb-4136-a6c4-de984c84c4e0 */public void method() {// TODO: implement}}/******************************************************************* ***** Module: BusinessRecord.java* Author: ct* Purpose: Defines the Class BusinessRecord******************************************************************** ***/import java.text.SimpleDateFormat;import java.util.*;/** @pdOid a483084d-8bc4-43e0-90cf-e00b8c0f2749 */ public class BusinessRecord implements Subject {/** @pdOid 9297a1f4-951e-4c38-b329-203b81b6099c */private Business business;/** @pdOid 1fb84d08-bc8f-4046-bfac-72690bba07a0 */public void method() {business = new Business();SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");// 设置日期格式System.out.println("方法method()被调用,调用时间为"+df.format(new Date()));try{business.method();System.out.print("方法method()调用成功");}5catch(Exception exception){System.out.println("方法method()调用失败");}// TODO: implement}}/******************************************************************* ***** Module: Client.java* Author: ct* Purpose: Defines the Class Client******************************************************************** ***/import java.util.*;/** @pdOid 2b1f68aa-d729-4abc-93ca-01efd37c9639 */ public class Client {public static void main(String args[]){Subject subject;subject = new BusinessRecord();subject.method();}}/******************************************************************* ***** Module: Subject.java* Author: ct* Purpose: Defines the Interface Subject******************************************************************** ***/import java.util.*;/** @pdOid afede86b-4789-4a4c-adf6-9279830b0daf */ public interface Subject {6/** @pdOid ee711ba0-966a-4ac3-b268-3465f00bb217 */void method();}2. 类图:实现代码:/******************************************************************* ***** Module: AbstractSearch.java* Author: ct* Purpose: Defines the Interface AbstractSearch******************************************************************** ***/import java.util.*;/** @pdOid be2dbcb3-27f7-4e9b-b0a3-6f655b4e66d5 */ public interface AbstractSearch {7/** @pdOid 70787691-2bca-4c73-a980-95cd9479d5c0 */void search();}/******************************************************************* ***** Module: Client.java* Author: ct* Purpose: Defines the Class Client******************************************************************** ***/import java.util.*;/** @pdOid e3a08fe1-13d6-4273-81ef-84b8085e6c24 */ public class Client {public static void main(String args[]){SearchProxy searchProxy = new SearchProxy();searchProxy.setSearch(new Search());searchProxy.setLevel(1);searchProxy.search();}}/******************************************************************* ***** Module: Search.java* Author: ct* Purpose: Defines the Class Search******************************************************************** ***/import java.util.*;/** @pdOid 31177e92-2fe6-4fd1-b00b-df0902d6f002 */ public class Search implements AbstractSearch {/** @pdOid 8553a78e-405b-4534-bb25-3a06da2fe202 */public void search() {8// TODO: implementSystem.out.println("正在检索");}}/******************************************************************* ***** Module: SearchProxy.java* Author: ct* Purpose: Defines the Class SearchProxy******************************************************************** ***/import java.util.*;/** @pdOid f6c0f634-671a-4dab-a765-80e44a8f869d */ public class SearchProxy implements AbstractSearch {/** @pdOid 3af41673-c60e-4d2b-901b-4e584bc507b6 */private Search search;/** @pdOid 72e3173f-2ed7-47c8-ba4b-4dbf77334712 */private int level;public void setSearch(Search search){this.search = search;}public void setLevel(int level){this.level = level;}/** @pdOid 7de0050c-ccf7-474f-a2df-6472769c2c9c */ public void search() {// TODO: implementif(level > 0){search.search();System.out.println("进行一次搜索,记录进入日志"); }else{System.out.println("权限不足");}}9}3. 类图:实现代码:/******************************************************************* ***** Module: Chairman.java* Author: ct* Purpose: Defines the Class Chairman******************************************************************** ***/import java.util.*;/** @pdOid b97b6594-8cb8-49c2-9689-faf16e0f7cbb */ public class Chairman extends Checker {/** @param name* @pdOid d3055b0f-8c66-493c-a0e2-a64c029d38fa */public Chairman(String name) {// TODO: implement = name;}/** @param order* @pdOid 8f85dc01-f64d-4fc1-9812-225d8d9d5248 */public void handleRequest(Order order) {10// TODO: implementif(order.getValue() < 500000){System.out.println(name+"副董事长审批采购单,审批金额为"+order.getValue());}else{if(successor != null){successor.handleRequest(order);}}}}/******************************************************************* ***** Module: Checker.java* Author: ct* Purpose: Defines the Class Checker******************************************************************** ***/import java.util.*;/** @pdOid 11c6d290-a8e9-459a-ac46-9e1e9cf018c3 */ public abstract class Checker {/** @pdOid 3683aa20-a1a2-4365-b89a-33ef70bf0fa6 */protected String name;/** @pdOid f4ac9b42-67cd-4e3a-85c0-90d1872cf927 */protected Checker successor;/** @pdOid 7e737b99-d252-4f63-bddb-d7*******c12 */public void checker() {}11/** @param checker* @pdOid fa7e42ff-58ec-4bda-ad7a-915a3dd2db76 */public void setSuccessor(Checker checker) {this.successor = checker;}/** @param order* @pdOid 9bc7ff2a-8601-4d23-bd01-737ecb1b5bd6 */public void handleRequest(Order order) {}}/******************************************************************* ***** Module: Checker.java* Author: ct* Purpose: Defines the Class Checker******************************************************************** ***/import java.util.*;/** @pdOid 11c6d290-a8e9-459a-ac46-9e1e9cf018c3 */public abstract class Checker {/** @pdOid 3683aa20-a1a2-4365-b89a-33ef70bf0fa6 */protected String name;/** @pdOid f4ac9b42-67cd-4e3a-85c0-90d1872cf927 */protected Checker successor;/** @pdOid 7e737b99-d252-4f63-bddb-d7*******c12 */public void checker() {}12/** @param checker* @pdOid fa7e42ff-58ec-4bda-ad7a-915a3dd2db76 */public void setSuccessor(Checker checker) {this.successor = checker;}/** @param order* @pdOid 9bc7ff2a-8601-4d23-bd01-737ecb1b5bd6 */public void handleRequest(Order order) {}}/******************************************************************* ***** Module: Director.java* Author: ct* Purpose: Defines the Class Director******************************************************************** ***/import java.util.*;/** @pdOid 126a714a-9414-4ffe-9deb-f17269e80096 */ public class Director extends Checker {/** @param name* @pdOid d3055b0f-8c66-493c-a0e2-a64c029d38fa */public Director(String name) {// TODO: implement = name;}/** @param order* @pdOid 8f85dc01-f64d-4fc1-9812-225d8d9d5248 */public void handleRequest(Order order) {13// TODO: implementif(order.getValue() < 50000){System.out.println(name+"主管审批采购单,审批金额为"+order.getValue());}else{if(successor != null){successor.handleRequest(order);}}}}/******************************************************************* ***** Module: Directorate.java* Author: ct* Purpose: Defines the Class Directorate******************************************************************** ***/import java.util.*;/** @pdOid 8cb70c41-824a-4559-a005-0fec9023321c */ public class Directorate extends Checker {/** @param name* @pdOid 836110c2-9048-4cdf-8bb3-dcdb3464839c *//** @param order* @pdOid 082af595-58f4-4f33-9db8-136fa20ebdae */public void handleRequest(Order order) {// TODO: implementif(order.getValue() >= 500000){System.out.println("董事会审批采购单,审批金额为"+order.getValue());}else{14if(successor != null){successor.handleRequest(order);}}}}/******************************************************************* ***** Module: ViceChairman.java* Author: ct* Purpose: Defines the Class ViceChairman******************************************************************** ***/import java.util.*;/** @pdOid 648a9ef7-7d0f-4d24-89fa-acb5391eef16 */ public class ViceChairman extends Checker {/** @param name* @pdOid d3055b0f-8c66-493c-a0e2-a64c029d38fa */public ViceChairman(String name) {// TODO: implement = name;}/** @param order* @pdOid 8f85dc01-f64d-4fc1-9812-225d8d9d5248 */ public void handleRequest(Order order) {// TODO: implementif(order.getValue() < 100000){System.out.println(name+"副董事长审批采购单,审批金额为"+order.getValue());}else{15if(successor != null){successor.handleRequest(order);}}}}4. 类图:实现代码:/******************************************************************* ***** Module: CurrentEnviroment.java* Author: ct* Purpose: Defines the Class CurrentEnviroment******************************************************************** ***/import java.util.*;/** @pdOid 18242262-92b8-4e6a-b5a7-9b8a173e2805 */ public class CurrentEnviroment extends Enviroment {/** @pdOid 9475a2ed-e431-4eb6-a7f9-4d4e38429425 */16public CurrentEnviroment() {// TODO: implement}/** @param search* @pdOid 45b695e7-9ce8-4712-8249-6cd78749c8df */public void handleRequest(Search search) {// TODO: implementif(search.search("searchString") == true){System.out.println("找到结果");}else{if(successor!=null){successor.handleRequest(search);}}}}/******************************************************************* ***** Module: Enviroment.java* Author: ct* Purpose: Defines the Class Enviroment******************************************************************** ***/import java.util.*;/** @pdOid 40da0227-c1c6-40a6-909e-d0e272210b3a */ public abstract class Enviroment {/** @pdOid 53a544ea-77ea-4bf5-aadc-badbea983d7f */protected Enviroment successor;17public void setSuccessor(Enviroment enviroment) {// TODO: implementthis.successor = enviroment;}/** @param search* @pdOid dbe5e107-c298-4f27-a5ef-ff459b0bd379 */public abstract void handleRequest(Search search);/******************************************************************* ***** Module: OtherEnviroment.java* Author: ct* Purpose: Defines the Class OtherEnviroment******************************************************************** ***/import java.util.*;/** @pdOid 9f7510bc-d274-46b3-8e00-41abf1324466 */ public class OtherEnviroment extends Enviroment {/** @pdOid 1cebd420-0940-4b09-a101-f3afe77130f9 */public void enviorment() {// TODO: implement}/** @param search* @pdOid 012b488a-1fd0-4801-a83a-95c3dfa7fedc */public void handleRequest(Search search) {// TODO: implementif(search.search("searchString") == true){System.out.println("找到结果");}else{if(successor!=null){successor.handleRequest(search);}18}}}/******************************************************************* ***** Module: Search.java* Author: ct* Purpose: Defines the Class Search******************************************************************** ***/import java.util.*;/** @pdOid cab1c494-6e2f-49d1-9021-6f2b501ed803 */ public class Search {/** @pdOid ae2d1a54-0a7d-4b54-b47a-d6569ccc2a37 */private String searchString;/** @pdOid e8ed9a1f-4521-4b04-a142-e163c19abf28 */ public String getSearchString() {return searchString;}/** @param newSearchString* @pdOid 2a0379bd-10a0-4a5b-a2c7-11840bc19468 */ public void setSearchString(String newSearchString) { searchString = newSearchString;}/** @param searchString* @pdOid 12c1ede5-0d9d-4a8e-92a3-2adb6a0c3973 */ public boolean search(String searchString) {// TODO: implementSystem.out.println("正在搜索");return false;19}}public class Client {public static void main(String args[]){}}5. 类图:实现代码:/******************************************************************* ***** Module: Button.java* Author: ct* Purpose: Defines the Class Button******************************************************************** ***/import java.util.*;/** @pdOid 30094efd-02a2-4173-aea0-b72d303bbc66 */20public class Button {/** @pdOid a8c78204-5ede-4b5d-8a6c-728613a3904c */private Switch i;/** @param switch* @pdOid 4d49a447-614e-4c2b-b065-f6a6a3ed53d0 */public void setSwitch(Switch a) {// TODO: implementi = a;}/** @pdOid 3d47aa4d-415a-40f6-8b46-14acf3a6d039 */ public void click() {// TODO: implementi.execute();}}public class Client {public static void main(String args[]){Button button1,button2,button3,button4;Switch switch1,switch2,switch3,switch4;Light light1 = new Light();Fanner fanner = new Fanner();button1 = new Button();button2 = new Button();button3 = new Button();button4 = new Button();switch1 = new FannerOpenSwitch();switch2 = new FannerCloseSwitch();switch3 = new LightOpenSwitch();switch4 = new LightCloseSwitch();21switch1.setFanner(fanner);switch2.setFanner(fanner);switch3.setLight(light1);switch4.setLight(light1);button1.setSwitch(switch1);button2.setSwitch(switch2);button3.setSwitch(switch3);button4.setSwitch(switch4);button1.click();button2.click();button3.click();button4.click();}}/******************************************************************* ***** Module: Fanner.java* Author: ct* Purpose: Defines the Class Fanner******************************************************************** ***/import java.util.*;/** @pdOid cbdbef4a-f8f3-4f17-bc74-11a4b2e5c0f8 */ public class Fanner {/** @pdOid 7aef0cb5-2180-452e-be04-3066aec8ccb6 */public void open() {// TODO: implementSystem.out.println("风扇打开");}/** @pdOid 3773ee82-63bf-491b-9370-414e9f10819f */public void close() {// TODO: implementSystem.out.println("风扇关闭");22}}/******************************************************************* ***** Module: FannerCloseSwitch.java* Author: ct* Purpose: Defines the Class FannerCloseSwitch******************************************************************** ***/import java.util.*;/** @pdOid 6b7b50cd-6c45-43ed-9f09-c4cd172dedda */ public class FannerCloseSwitch extends Switch {/** @pdOid 6ee55f51-a4a0-41da-9781-a822e71780e8 */private Fanner fanner;public void setFanner(Fanner fanner){this.fanner = fanner;}/** @pdOid fc34aaa6-c71e-44d7-923e-04e003f7a562 */public void execute() {// TODO: implementfanner.close();}}/******************************************************************* ***** Module: FannerOpenSwitch.java* Author: ct* Purpose: Defines the Class FannerOpenSwitch******************************************************************** ***/import java.util.*;23/** @pdOid d20dabce-44a2-4da8-8033-90f1f67e34d7 */ public class FannerOpenSwitch extends Switch {/** @pdOid 6087bc78-5be9-4d90-ae09-93e6f6060838 */private Fanner fanner;public void setFanner(Fanner fanner){this.fanner = fanner;}/** @pdOid f63c7833-5801-49a1-b7eb-00659b2c543a */public void execute() {// TODO: implementfanner.open();}}/******************************************************************* ***** Module: Light.java* Author: ct* Purpose: Defines the Class Light******************************************************************** ***/import java.util.*;/** @pdOid 8c3bd8ea-c761-466d-9c46-f5172c60126e */ public class Light {/** @pdOid fe4c531a-fb5b-4688-bed5-73e661d1a056 */public void open() {// TODO: implementSystem.out.println("电灯打开");}/** @pdOid 4075dc22-f423-482e-9800-cfa5d6c7e7f6 */24public void close() {// TODO: implementSystem.out.println("电灯关闭");}}/******************************************************************* ***** Module: LightCloseSwitch.java* Author: ct* Purpose: Defines the Class LightCloseSwitch******************************************************************** ***/import java.util.*;/** @pdOid bd09fc94-4e0f-49b3-9958-a0355c95e856 */ public class LightCloseSwitch extends Switch {/** @pdOid 47dda79d-ce1b-4ae7-aaad-5387ae21238d */private Light light;public void setLight(Light light){this.light = light;}/** @pdOid e77b9a55-fccf-497b-8528-2c6011398805 */public void execute() {// TODO: implementlight.close();}}/******************************************************************* ***** Module: LightOpenSwitch.java* Author: ct25* Purpose: Defines the Class LightOpenSwitch******************************************************************** ***/import java.util.*;/** @pdOid a5131172-374c-4568-b715-99c592530f13 */ public class LightOpenSwitch extends Switch {/** @pdOid 5cea82a9-03a9-4e9f-8c72-14b4678864c5 */private Light light;public void setLight(Light light){this.light = light;}/** @pdOid 93e91856-8d95-468a-a336-3d9bd05135b1 */public void execute() {// TODO: implementlight.open();}}/******************************************************************* ***** Module: Switch.java* Author: ct* Purpose: Defines the Class Switch******************************************************************** ***/import java.util.*;/** @pdOid 467f4ee2-13dc-4d62-a6fc-ec2354b2246b */ public class Switch {/** @pdOid 21a45baf-4a5b-4248-aaa8-2064ee26ebbb */public void setFanner(Fanner fanner){26}public void setLight(Light light){}public void execute() {// TODO: implement}}6. 类图:实现代码:27/******************************************************************* ***** Module: MenuItem.java* Author: ct* Purpose: Defines the Class MenuItem******************************************************************** ***/import java.util.*;/** @pdOid 204f6ad4-335b-48e5-b92f-d7beb659e9ce */ public class MenuItem {/** @pdOid ae022eff-fe61-4161-81d8-547618e210e4 */private Commend commend;/** @param commend* @pdOid 63fea885-9bfa-45a8-8823-f60973855e3c */public void setCommend(Commend commend) {// TODO: implementmend = commend;}/** @pdOid 77782efe-3615-4fc2-97f6-49d82076245c */public void click() {// TODO: implementcommend.execute();}}/******************************************************************* ***** Module: BoardScreen.java* Author: ct* Purpose: Defines the Class BoardScreen******************************************************************** ***/import java.util.*;/** @pdOid 4790cb10-ad4f-4e51-97a2-bdee42fea325 */public class BoardScreen {/** @pdOid e88a9905-0fde-4f3e-a27e-efa6c5881e29 */public void open() {28// TODO: implementSystem.out.println("board screen已经打开");}/** @pdOid c459bdd0-4e46-4d55-8554-a8a6762255ba */public void create() {// TODO: implementSystem.out.println("board screen已经创建");}/** @pdOid 2ea4f19a-ada4-4820-8e31-df6cefe51fc4 */public void edit() {// TODO: implementSystem.out.println("board screen已经可以编辑"); }}public class Client {public static void main(String args[]){ MenuItem menuItem1,menuItem2,menuItem3; Commend commend1,commend2,commend3; BoardScreen boardScreen;boardScreen = new BoardScreen();menuItem1 = new MenuItem();menuItem2 = new MenuItem();menuItem3 = new MenuItem();commend1 = new CreateCommend(boardScreen); commend2 = new OpenCommend(boardScreen); commend3 = new EditCommend(boardScreen); menuItem1.setCommend(commend1);menuItem2.setCommend(commend2);menuItem3.setCommend(commend3);menuItem1.click();menuItem2.click();29menuItem3.click();}}/******************************************************************* ***** Module: Commend.java* Author: ct* Purpose: Defines the Class Commend******************************************************************** ***/import java.util.*;/** @pdOid 8a0b1f2a-2780-426a-8538-dfbef925ef59 */ public class Commend {/** @pdOid 4bacf77f-5564-471c-ae88-b17ebd972c41 */public void execute() {// TODO: implement}}/******************************************************************* ***** Module: CreateCommend.java* Author: ct* Purpose: Defines the Class CreateCommend******************************************************************** ***/import java.util.*;/** @pdOid 90a4ac64-1e39-4d69-8614-1d59b8de68d5 */ public class CreateCommend extends Commend {/** @pdOid e0f00f28-8a51-4c37-b32f-d60419f7e6e2 */private BoardScreen boardScreen;30public CreateCommend(BoardScreen boardScreen){this.boardScreen = boardScreen;}/** @pdOid 922ed0fa-9cef-4d41-86c8-259ac5798948 */public void execute() {// TODO: implementboardScreen.create();}}/******************************************************************* ***** Module: EditCommend.java* Author: ct* Purpose: Defines the Class EditCommend******************************************************************** ***/import java.util.*;/** @pdOid 2420101e-20bd-4360-88a7-37f72fd00952 */ public class EditCommend extends Commend {/** @pdOid 3be7f99f-f110-4caa-8491-56311b3aabe2 */private BoardScreen boardScreen;public EditCommend(BoardScreen boardScreen){this.boardScreen = boardScreen;}/** @pdOid 2fe8b1d2-3dcf-44d0-8fb7-b8af7c9f36cf */public void execute() {// TODO: implementboardScreen.edit();}31}/******************************************************************* ***** Module: OpenCommend.java* Author: ct* Purpose: Defines the Class OpenCommend******************************************************************** ***/import java.util.*;/** @pdOid 71ca43ed-b6e6-4912-8b4e-c35387a5d57b */public class OpenCommend extends Commend {/** @pdOid ff24849a-10b6-4d16-8876-5675aac33f97 */private BoardScreen boardScreen;public OpenCommend(BoardScreen boardScreen){this.boardScreen = boardScreen;}/** @pdOid 82887f80-99f9-4479-b9d6-ad68a25b5bb6 */public void execute() {// TODO: implementboardScreen.open();}}六、实验小结本次试验大有收获,第四个要求有点看不懂,需要实现搜索代码吗,关于这几个模式该怎么用已经有点底了,但是具体应用场景仍然不清楚,感觉容易弄混。