设计模式实验一实验报告完整版

合集下载

设计模式实验报告总结(3篇)

设计模式实验报告总结(3篇)

第1篇一、实验背景随着软件工程的不断发展,设计模式作为一种解决软件开发中常见问题的有效方法,越来越受到广泛关注。

本次实验旨在通过学习设计模式,提高编程能力,掌握解决实际问题的方法,并加深对设计模式的理解。

二、实验目的1. 理解设计模式的基本概念和分类;2. 掌握常见设计模式的原理和应用;3. 提高编程能力,学会运用设计模式解决实际问题;4. 培养团队协作精神,提高项目开发效率。

三、实验内容本次实验主要涉及以下设计模式:1. 创建型模式:单例模式、工厂模式、抽象工厂模式、建造者模式;2. 结构型模式:适配器模式、装饰者模式、桥接模式、组合模式、外观模式;3. 行为型模式:策略模式、模板方法模式、观察者模式、责任链模式、命令模式。

四、实验过程1. 阅读相关资料,了解设计模式的基本概念和分类;2. 分析每种设计模式的原理和应用场景;3. 编写代码实现常见设计模式,并进行分析比较;4. 将设计模式应用于实际项目中,解决实际问题;5. 总结实验经验,撰写实验报告。

五、实验结果与分析1. 创建型模式(1)单例模式:通过控制对象的实例化,确保一个类只有一个实例,并提供一个访问它的全局访问点。

实验中,我们实现了单例模式,成功避免了资源浪费和同步问题。

(2)工厂模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类。

实验中,我们使用工厂模式创建不同类型的交通工具,提高了代码的可扩展性和可维护性。

(3)抽象工厂模式:提供一个接口,用于创建相关或依赖对象的家族,而不需要指定具体类。

实验中,我们使用抽象工厂模式创建不同类型的计算机,实现了代码的复用和扩展。

(4)建造者模式:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

实验中,我们使用建造者模式构建不同配置的房屋,提高了代码的可读性和可维护性。

2. 结构型模式(1)适配器模式:将一个类的接口转换成客户期望的另一个接口,使原本接口不兼容的类可以一起工作。

实验一正交试验设计报告

实验一正交试验设计报告

实验一正交试验设计报告引言正交试验设计是一种广泛应用于工程和科学研究中的试验设计方法。

其目的是帮助研究人员在有限的资源条件下,高效地确定影响试验结果的变量及其相互作用关系。

本实验旨在通过正交试验设计方法,确定研究对象在不同变量水平下的最佳操作条件。

实验目的本实验的目的是通过正交试验设计,确定某种新型水稻品种的最佳种植条件。

通过调整种植条件中的若干因素,如光照时间、温度、湿度等,来研究这些因素对水稻产量的影响。

实验方法设计方案本实验采用L18(3^6)正交试验设计,共有18个实验条件。

通过正交试验设计,将6个因素进行组合分配,保证每个因素在不同水平上均匀分布。

实验设计如下表所示:实验条件光照时间温度湿度施肥量施药量压力- - - - - - -1 A1 B1 C1 D1 E1 F12 A1 B1 C2 D2 E2 F23 A1 B1 C3 D3 E3 F34 A1 B2 C1 D1 E2 F35 A1 B2 C2 D2 E3 F16 A1 B2 C3 D3 E1 F27 A2 B1 C1 D2 E3 F28 A2 B1 C2 D3 E1 F39 A2 B1 C3 D1 E2 F110 A2 B2 C1 D3 E1 F111 A2 B2 C2 D1 E3 F212 A2 B2 C3 D2 E1 F313 A3 B3 C1 D3 E1 F214 A3 B3 C2 D1 E2 F315 A3 B3 C3 D2 E3 F116 A3 B1 C1 D1 E3 F317 A3 B1 C2 D2 E1 F118 A3 B1 C3 D3 E2 F2 实验步骤1. 在实验室中搭建水稻种植环境,设置光照时间、温度、湿度、施肥量、施药量和压力等条件;2. 按照正交试验设计方案,安排实验条件的组合;3. 根据每个实验条件的组合,进行水稻的种植和管理;4. 在收获时,记录水稻的产量,并进行数据统计和分析。

实验结果与分析根据实验数据统计和分析,得到了不同因素水平对水稻产量的影响。

【精品实验报告】软件体系结构设计模式实验报告

【精品实验报告】软件体系结构设计模式实验报告

【精品实验报告】软件体系结构设计模式实验报告软件体系结构设计模式实验报告学生姓名: 所在学院: 学生学号: 学生班级: 指导老师: 完成日期:一、实验目的熟练使用PowerDesigner和任意一种面向对象编程语言实现几种常见的设计模式,包括组合模式、外观模式、代理模式、观察者模式和策略模式,理解每一种设计模式的模式动机,掌握模式结构,学习如何使用代码实现这些模式,并学会分析这些模式的使用效果。

二、实验内容使用PowerDesigner和任意一种面向对象编程语言实现组合模式、外观模式、代理模式、观察者模式和策略模式,包括根据实例绘制模式结构图、编写模式实例实现代码,运行并测试模式实例代码。

(1) 组合模式使用组合模式设计一个杀毒软件(AntiVirus)的框架,该软件既可以对某个文件夹(Folder)杀毒,也可以对某个指定的文件(File)进行杀毒,文件种类包括文本文件TextFile、图片文件ImageFile、视频文件VideoFile。

绘制类图并编程模拟实现。

(2) 组合模式某教育机构组织结构如下图所示:北京总部教务办公室湖南分校行政办公室教务办公室长沙教学点湘潭教学点行政办公室教务办公室行政办公室教务办公室行政办公室在该教育机构的OA系统中可以给各级办公室下发公文,现采用组合模式设计该机构的组织结构,绘制相应的类图并编程模拟实现,在客户端代码中模拟下发公文。

(注:可以定义一个办公室类为抽象叶子构件类,再将教务办公室和行政办公室作为其子类;可以定义一个教学机构类为抽象容器构件类,将总部、分校和教学点作为其子类。

)(3) 外观模式某系统需要提供一个文件加密模块,加密流程包括三个操作,分别是读取源文件、加密、保存加密之后的文件。

读取文件和保存文件使用流来实现,这三个操作相对独立,其业务代码封装在三个不同的类中。

现在需要提供一个统一的加密外观类,用户可以直接使用该加密外观类完成文件的读取、加密和保存三个操作,而不需要与每一个类进行交互,使用外观模式设计该加密模块,要求编程模拟实现。

设计模式实验1报告

设计模式实验1报告
在该图形库中每个图形类的init方法用于初始化所创建的图形setcolor方法用于给图形设置边框颜色fill方法用于给图形设置填充颜色setsize方法用于设置图形的大小display方法用于显示图形
实验报告
系别
班级
学号
姓名
时间
地点
计科
13:40-15:20
实验楼C106
课程名称
设计模式
实验名称
面向对象设计原则
实验过程
一.实验目的与要求
1、熟练使用面向对象设计原则
二.实验设备
微型计
迪米特法则定义:不要和“陌生人”说话。或只与你的直接朋友通信。其中,我们称出现成员变量、方法参数、方法返回值中的类为直接的朋友,而出现在局部变量中的类则不是直接的朋友。也就是说,陌生的类最好不要作为局部变量的形式出现在类的内部。
现需要根据面向对象设计原则对系统进行重构,画类图。需求如下:
隔离图形的创建和使用,将图形的创建过程封装在专门的类中,客户类在使用时无须直接创建图形对象,甚至不需要关心具体图形类类名。
客户类能够方便地更换图形或使用新增图形,无须针对具体图形类编程,符合开闭原则。
3、体育老师让体委清点全班女生人数,类图如下:
代码如下:
老师不应该执行任何与女学生相关的操作,显然违反了迪米特法则。重新设计类图,编码实现,符合迪米塔法则。
四.实验结果
1.类图:
2.代码:
3.类图、代码:
五.实验总结
2、某图形库API中提供了多种矢量图模板,用户可以基于这些矢量图创建不同的显示图形,图形库设计人员设计的初始类图如图所示。
在该图形库中,每个图形类的init()方法用于初始化所创建的图形,setColor()方法用于给图形设置边框颜色,fill()方法用于给图形设置填充颜色,setSize()方法用于设置图形的大小,display()方法用于显示图形。

设计模式实验一实验报告完整版

设计模式实验一实验报告完整版

实验1 UML实验(1)实验学时: 2每组人数: 1实验类型: 3 (1:基础性2:综合性3:设计性4:研究性)实验要求: 1 (1:必修2:选修3:其它)实验类别: 3 (1:基础2:专业基础3:专业4:其它)一、实验目的1.学会安装和使‎用建模工具P‎o werDe‎si gner‎,熟练使用Po‎werDes‎i gner绘‎制常用的UM‎L图形,熟悉常用的U‎M L符号;2.构建用例模型‎来描述软件需‎求,包括绘制用例‎图,撰写用例文档‎并制作用例检‎查矩阵;3. 绘制状态图描‎述对象的状态‎及转换。

二、实验内容1. 某酒店订房系‎统描述如下:(1) 顾客可以选择‎在线预订,也可以直接去‎酒店通过前台‎服务员预订;(2) 前台服务员可‎以利用系统直‎接在前台预订‎房间;(3) 不管采用哪种‎预订方式,都需要在预订‎时支付相应订‎金;(4) 前台预订可以‎通过现金或信‎用卡的形式进‎行订金支付,但是网上预订‎只能通过信用‎卡进行支付;(5) 利用信用卡进‎行支付时需要‎和信用卡系统‎进行通信;(6) 客房部经理可‎以随时查看客‎房预订情况和‎每日收款情况‎。

绘制该酒店订‎房系统的用例‎图。

2. 根据以下场景‎绘制用例图:某企业为了方‎便员工用餐,为企业餐厅开‎发了一个订餐‎系统(COS:Cafete‎ri a Orderi‎n g System‎),企业员工可通‎过企业内联网‎使用该系统。

该系统功能描‎述如下:(1) 企业的任何员‎工都可以查看‎菜单和今日特‎价;(2) 系统的顾客是‎注册到系统的‎员工,可以在线订餐‎(以下操作均需‎先登录)、注册工资支付‎、修改订餐信息‎和删除订餐信‎息,在注册工资支‎付时需要通过‎工资系统进行‎身份验证;(3) 餐厅员工是特‎殊的顾客,可以进行备餐‎(系统记录备餐‎信息)、生成付费请求‎和请求送餐,其中对于注册‎使用工资支付‎的顾客生成付‎费请求并发送‎给工资系统;(4) 菜单管理员是‎餐厅员工的一‎种,可以管理菜单‎;(5) 送餐员也是餐‎厅员工的一种‎,可以打印送餐‎说明、记录送餐信息‎(如送餐时间)以及记录收费‎(对于没有注册‎工资支付的顾‎客,由送餐员收取‎现金后记录)。

设计型实验报告模板

设计型实验报告模板

一、实验名称【实验名称】二、实验目的1. 熟悉【实验目的1】。

2. 掌握【实验目的2】。

3. 了解【实验目的3】。

三、实验原理【实验原理简介】四、实验仪器与材料1. 仪器:- 【仪器1】- 【仪器2】- 【仪器3】- ...2. 材料:- 【材料1】- 【材料2】- 【材料3】- ...五、实验方法与步骤1. 实验方法【简要描述实验方法】2. 实验步骤1) 准备工作:- 【步骤1】- 【步骤2】- 【步骤3】- ...2) 实验操作:- 【步骤4】- 【步骤5】- 【步骤6】- ...3) 数据记录与分析:- 【步骤7】- 【步骤8】- 【步骤9】- ...六、实验数据记录与分析1. 实验数据记录【在此处记录实验过程中观察到的数据,如表格、图表等形式】2. 数据分析【根据实验数据进行分析,包括但不限于以下内容】- 对比实验前后数据的变化- 分析实验结果与预期目标的关系- 探讨实验中可能存在的问题及原因七、实验结果与讨论1. 实验结果【在此处描述实验结果,包括但不限于以下内容】- 实验现象描述- 数据分析结果- 与预期目标的一致性2. 讨论【对实验结果进行讨论,包括但不限于以下内容】- 分析实验结果背后的原理- 探讨实验过程中遇到的问题及解决方法- 对实验结果的进一步分析及改进建议八、实验结论【总结实验结果,得出实验结论】九、实验心得与体会【总结实验过程中的收获与体会,包括但不限于以下内容】- 对实验原理和方法的深入理解- 实验操作技能的提升- 团队合作的重要性- 实验过程中遇到的问题及解决策略十、参考文献【列出实验过程中参考的文献】【注】以上模板仅供参考,具体实验报告内容需根据实际实验情况进行调整。

设计模式实验报告

设计模式实验报告

预备实验UML建模实验目的:加深对UML建模的理解实验环境:MyEclipse(Java)或Rational Rose等实验内容:1、需求描述A.某学校准备开发一套选课管理系统,其主要用户是教师和学生。

假设教师可以查看课程、增加课程和修改课程;学生可以选修一门或多门课程(为简化起见,学生选修某课程后不允许修改和删除),还能够查看所选修课程的成绩。

其中:课程可由课程编号、课程名称进行描述;教师可用工号和姓名进行描述;学生可用学号、姓名进行描述。

B. 某信用卡系统账户具有使用状态和冻结状态,其中使用状态又包括正常状态和透支状态两种子状态。

如果账户余额小于零则进入透支状态,透支状态时既可以存款又可以取款,但是透支金额不能超过5000元;如果余额大于零则进入正常状态,正常状态时既可以存款又可以取款;如果连续透支100天,则进入冻结状态,冻结状态下既不能存款又不能取款,必须要求银行工作人员解冻。

用户可以在使用状态或冻结状态下请求注销账户。

根据上述要求,绘制账户类的状态图。

2、用例图根据上面的需求描述A,运用UML画出用例图。

画图中的用例名和参与者均用中文表示;3、类图根据上面的需求描述A,运用UML画出初始设计类图(仅含业务类),图中应给出属性和方法的中文名称,类与类之间若存在关联,可不确定关联的方向,但需要标出这些关联的多重性。

4、状态图根据上面的需求描述B,运用UML画出状态图实验2 单一职责原则训练实验目的:加深对单一职责原则的理解实验环境:C#.Net/VC++.Net或MyEclipse(Java)等实验内容:1、实例说明某基于Java的C/S系统的“登录功能”通过如下登录类(Login)实现:现使用单一职责原则对其进行重构,并编程实现(可仿真实现数据数据库DAO 形式,当然如果能实现真实的数据库连接并进行数据库的操纵更好)。

package Experiment_One_Code;import java.sql.*;/**** @author Author**/public class DBUtil {public static Connection getConnction() {Connection dbConnection = null;try {Class.forName(DRIVER_CLASS);dbConnection = DriverManager.getConnection(DATABASE_URL,DATABASE_USRE, DATABASE_PASSWORD);} catch (Exception e) {e.printStackTrace();}return dbConnection;}}package Experiment_One_Code;/**** @author Author**/public class UserDAO {private DBUtil db = new DBUtil();private String userName;private String userPassword;public boolean findUser(String userName, String userPassword) { return false;}}package Experiment_One_Code;/**** @author Author**/public class LoginForm {public LoginForm(UserDAO dao) {super();this.dao = dao;}public LoginForm() {super();}UserDAO dao = new UserDAO();public void init() {}public void display() {}public void validate() {}}package Experiment_One_Code;/**** @author Author**/public class MainClass {public static void main(String[] args) { // TODO Auto-generated method stubLoginForm loginForm = new LoginForm();loginForm.init();loginForm.display();loginForm.validate();}}2、实例说明某图形处理系统通过如下类实现:package compute.area_circle.HKT;/**** @author Author1* @date 2019-04-02 上午11:26:41* 正方形类*/public class squareClass {public void Draw() {System.out.println("画一个正方形!");}public void Area() {System.out.println("计算正方形的面积!");}}package compute.area_circle.HKT;/**** @author Author1* @date 2019-04-02 上午11:49:50**/public class figure_Draw_Program {public static void main(String[] args) { // TODO Auto-generated method stubsquareClass square1 = new squareClass();square1.Draw();}}package compute.area_circle.HKT;/*** @author Author1* @date 2019-04-02 上午11:38:47**/public class figure_Compute_Program { /*** @param args*/public static void main(String[] args) { // TODO Auto-generated method stubsquareClass square = new squareClass();square.Area();}}现使用单一职责原则对其进行重构。

最经典的设计模式实验报告

最经典的设计模式实验报告

设计模式实验报告(一)课程名称: ___设计模式__ _实验名称:__创建型与结构型模式专业: 计算机科学与技术学号:姓名:实验日期:2012.4.09工厂模式一、实验目的:1、学习工厂模式设计2、学习抽象工厂模式设计3、学习建造者模式设计4、学习单例模式二、运行环境:Microsoft Visual Studio 2010三、实验内容1、工厂模式模式定义:在工厂方法模式中,工厂父类负责定义创建产品对象的公共接口,而工厂子类则负责生成具体的产品对象,这样做的目的是将产品类的实例化操作延迟到工厂子类中完成,即通过工厂子类来确定究竟应该实例化哪一个具体产品类。

实例说明:为了让增加新品牌电视机更加方便,可以通过工厂方法模式对该电视机厂进行进一步重构。

可以将原有的工厂进行分割,为每种品牌的电视机提供一个子工厂,海尔工厂专门负责生产海尔电视机,海信工厂专门负责生产海型电视机,如果需要生产TCL电视机,只需要对应增加一个新的TCL工厂即可,原有的工厂无需做任何修改,使得整个系统具有更好的灵活性和可扩展性。

①源代码:Class1:using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Windows.Forms;namespace工厂模式?{public interface TV{void play();}public class HaierTV : TV{public void play(){MessageBox.Show("海£尔?电?视酣?播¥放?中D");}}public class HisenseTV : TV{public void play(){MessageBox.Show("海£信?电?视酣?播¥放?中D");}}public interface TVFactory{TV produceTV();}public class HaierTVFactory : TVFactory{public TV produceTV(){MessageBox.Show("海£尔?电?视酣?工¤厂§生Θ?产ú海£信?电?视酣?机ú");return new HaierTV();}}public class HisenseTVFactory : TVFactory{public TV produceTV(){MessageBox.Show("海£信?电?视酣?工¤厂§生Θ?产ú海£信?电?视酣?机ú");return new HisenseTV();}}class Class1{}}Form1.csusing System;using System.Collections.Generic;using ponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;namespace工¤厂§模£式?{public partial class Form1 : Form{public Form1(){InitializeComponent();}private void button1_Click(object sender, EventArgs e) {TV tv;TVFactory factory;factory = new HaierTVFactory (); //唯¨一?不?一?样ù的?地?方?tv=factory.produceTV ();tv .play ();}private void button2_Click(object sender, EventArgs e) {TV tv;TVFactory factory;factory = new HisenseTVFactory(); //唯¨一?不?一?样ù的?地?方?tv = factory.produceTV();tv.play();}}}②运行结果:主界面:点击“海尔电视”按钮后:再点击“确定”后:点击“海信电视”按钮后:点击“确定”按钮后:2、抽象工厂模式模式定义:提供一个创建一系列相关或相互依赖对象的接口,且无需指定他们具体的类。

【免费下载】设计模式实验报告

【免费下载】设计模式实验报告
Client
+ init ()
Circle
+ setColor () : void
+ fill ()
+ setSize () : void
+ display () : void
...
: void
: void
+ init ()
Triangle
+ setColor () : void
+ fill ()
+ setSize () : void
实验二 设计模式实验一
一、实验目的
熟练使用面向对象设计原则对系统进行重构;熟练使用 PowerDesigner 和任意一种面 向对象编程语言实现几种常见的设计模式,包括简单工厂模式、工厂方法模式、抽象工厂 模式、单例模式、适配器模式、桥接模式和组合模式,理解每一种设计模式的模式动机, 掌握模式结构,学习如何使用代码实现这些模式,并学会分析这些模式的使用效果。
浅绿色按钮
皮肤库
Spring风格
Summer风格
蓝色边框组合框 该皮肤库需要具备良好的灵活性和可扩展性,用户可以自由选择不同的皮肤,开发人
2
对全部高中资料试卷电气设备,在安装过程中以及安装结束后进行高中资料试卷调整试验;通电检查所有设备高中资料电试力卷保相护互装作置用调与试相技互术关,系电,力根通保据过护生管高产线中工敷资艺设料高技试中术卷资,配料不置试仅技卷可术要以是求解指,决机对吊组电顶在气层进设配行备置继进不电行规保空范护载高与中带资负料荷试下卷高问总中题体资,配料而置试且时卷可,调保需控障要试各在验类最;管大对路限设习度备题内进到来行位确调。保整在机使管组其路高在敷中正设资常过料工程试况中卷下,安与要全过加,度强并工看且作护尽下关可都于能可管地以路缩正高小常中故工资障作料高;试中对卷资于连料继接试电管卷保口破护处坏进理范行高围整中,核资或对料者定试对值卷某,弯些审扁异核度常与固高校定中对盒资图位料纸置试,.卷保编工护写况层复进防杂行腐设自跨备动接与处地装理线置,弯高尤曲中其半资要径料避标试免高卷错等调误,试高要方中求案资技,料术编试交写5、卷底重电保。要气护管设设装线备备置敷4高、调动设中电试作技资气高,术料课中并3中试、件资且包卷管中料拒含试路调试绝线验敷试卷动槽方设技作、案技术,管以术来架及避等系免多统不项启必方动要式方高,案中为;资解对料决整试高套卷中启突语动然文过停电程机气中。课高因件中此中资,管料电壁试力薄卷高、电中接气资口设料不备试严进卷等行保问调护题试装,工置合作调理并试利且技用进术管行,线过要敷关求设运电技行力术高保。中护线资装缆料置敷试做设卷到原技准则术确:指灵在导活分。。线对对盒于于处调差,试动当过保不程护同中装电高置压中高回资中路料资交试料叉卷试时技卷,术调应问试采题技用,术金作是属为指隔调发板试电进人机行员一隔,变开需压处要器理在组;事在同前发一掌生线握内槽图部内 纸故,资障强料时电、,回设需路备要须制进同造行时厂外切家部断出电习具源题高高电中中源资资,料料线试试缆卷卷敷试切设验除完报从毕告而,与采要相用进关高行技中检术资查资料和料试检,卷测并主处且要理了保。解护现装场置设。备高中资料试卷布置情况与有关高中资料试卷电气系统接线等情况,然后根据规范与规程规定,制定设备调试高中资料试卷方案。

设计模式实验一

设计模式实验一

设计模式实验一1.单例模式使用单例模式设计一个多文档窗口(注:在Java AWT/Swing 开发中可使用JDesktopPane和JInternalFrame来实现),要求在主窗体中某个内部子窗体只能实例化一次,即只能弹出一个相同的子窗体,如图1所示。

图1 多文档窗口示意图2.适配器模式现有一个接口DataOperation定义了排序方法sort(int[]) 和查找方法search(int[], int),已知类QuickSort的quickSort(int[])方法实现了快速排序算法,类BinarySearch 的binarySearch(int[], int)方法实现了二分查找算法。

现使用适配器模式设计一个系统,在不修改源代码的情况下将类QuickSort和类BinarySearch 的方法适配到DataOperation接口中。

绘制类图并编程实现。

3.模板方法模式对数据库的操作一般包括连接、打开、使用、关闭等步骤,在数据库操作模板类中我们定义了connDB()、openDB()、useDB()、closeDB()四个方法分别对应这四个步骤。

对于不同类型的数据库(如SQL Server和Oracle),其操作步骤都一致,只是连接数据库的步骤connDB()方法有所区别,现使用模板方法模式对其进行设计。

4.迭代器模式某商品管理系统的商品名称存储在一个字符串数组中,现需要自定义一个双向迭代器(MyIterator)实现对该商品名称数组的双向(前向和后向)遍历。

绘制类图并编程实现。

5.工厂方法模式某系统日志记录器要求支持多种日志记录方式,如文件记录(FileLog)、数据库记录(DatabaseLog)等,且用户可以根据要求动态选择日志记录方式,现使用工厂方法模式设计该系统。

6.原型模式在某OA系统中,用户可以创建工作周报,由于某些岗位每周工作存在重复性,因此可以通过复制原有工作周报并进行局部修改来快速新建工作周报。

设计模式实验一实验报告完整版

设计模式实验一实验报告完整版

实验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) 送餐员也是餐厅员工的一种,可以打印送餐说明、记录送餐信息(如送餐时间)以及记录收费(对于没有注册工资支付的顾客,由送餐员收取现金后记录)。

设计模式实验一实验报告完整版

设计模式实验一实验报告完整版
银行
信用卡申请


月报表生成

信用卡客户信息管理

信用卡交易记录

交易信息查询

6.销售信息管理系统订单类的状态图:
七、实验总结
通过这次实验知道了怎么画用例图、类图、活动图、状态图和顺序图。并知道了画类图时类与类之间的关系如关联、聚合、组合、依赖、继承和实现的作用和意义;也明白了用例图的作用和意义;还有状态图、顺序图和活动图这些以前都没怎么画过的图这次明白了怎么画。本次实验收获很大。
(4)菜单管理员是餐厅员工的一种,可以管理菜单;
(5)送餐员也是餐厅员工的一种,可以打印送餐说明、记录送餐信息(如送餐时间)以及记录收费(对于没有注册工资支付的顾客,由送餐员收取现金后记录)。
3. Draw a use case diagram for the following library system:
(1)信用卡申请。非信用卡客户填写信用卡申请表,说明所要申请的信用卡类型及申请者的基本信息,提交CCMS登录。如果信用卡申请被银行接受,客户会收到银行的确认函,并告知用户信用卡的有效期及信贷限额;否则银行会发送一封拒绝函给该客户。客户收到确认函后,需再次登录CCMS,用信用卡号和密码激活该信用卡。激活操作结束后,CCMS将激活通知发送给客户,告知客户其信用卡是否被成功地激活。
Users can check their own loan details at any time. Librarians are permitted to check the loan details of any user.
Library users can reserve books that are currently out on loan. If three reservations have already been made for a given book, and a further reservation is made, a new copy will be ordered by the librarian.

设计模式上机实验一实验报告

设计模式上机实验一实验报告

设计模式实验一实验报告书专业班级软件 0703 学号 3901070324 姓名吉亚云指导老师刘伟时间 2010年3月 27日中南大学软件学院实验一设计模式上机实验一一、实验目的熟练使用PowerDesigner绘制类图,构造系统的静态结构模型;使用PowerDesigner和任意一种面向对象编程语言实现几种常见的设计模式,包括简单工厂模式、工厂方法模式、抽象工厂模式、原型模式、单例模式、适配器模式、桥接模式和组合模式。

二、实验要求1. 使用PowerDesigner绘制标准的UML类图;2. 正确无误绘制简单工厂模式、工厂方法模式、抽象工厂模式、原型模式、单例模式、适配器模式、桥接模式和组合模式的模式结构图;3. 使用任意一种面向对象编程语言实现简单工厂模式、工厂方法模式、抽象工厂模式、原型模式、单例模式、适配器模式、桥接模式和组合模式,代码运行正确无误。

三、实验步骤1. 熟悉PowerDesigner11的常用功能;2. 使用PowerDesigner绘制类图;3. 使用PowerDesigner绘制简单工厂模式结构图并用面向对象编程语言实现该模式;4. 使用PowerDesigner绘制工厂方法模式结构图并用面向对象编程语言实现该模式;5. 使用PowerDesigner绘制抽象工厂模式结构图并用面向对象编程语言实现该模式;6. 使用PowerDesigner绘制原型模式结构图并用面向对象编程语言实现该模式;7. 使用PowerDesigner绘制单例模式结构图并用面向对象编程语言实现该模式;8. 使用PowerDesigner绘制适配器模式结构图并用面向对象编程语言实现该模式;9. 使用PowerDesigner绘制桥接模式结构图并用面向对象编程语言实现该模式;10. 使用PowerDesigner绘制组合模式结构图并用面向对象编程语言实现该模式。

四、实验报告要求1. 绘制实例场景的类图;2. 提供简单工厂模式结构图及实现代码;3. 提供工厂方法模式结构图及实现代码;4. 提供抽象工厂模式结构图及实现代码;5. 提供原型模式结构图及实现代码;6. 提供单例模式结构图及实现代码;7. 提供适配器模式结构图及实现代码;8. 提供桥接模式结构图及实现代码;9. 提供组合模式结构图及实现代码。

《设计模式》实验指导书

《设计模式》实验指导书

《设计模式》实验指导书软件学院前言随着面向对象技术的发展和广泛的应用,设计模式已成为面向对象开发人员的必备技能之一。

无论是面向对象的初学者还是具有一定开发经验的程序员,都可以通过对设计模式的学习和应用加深对面向对象思想的理解,开发出具有更好的可扩展性和复用性的软件。

本实验指导书通过项目实例让学生加深对设计模式的理解,在学习设计模式的同时掌握如何在实际软件开发中运用模式,强化对设计模式的理解和掌握。

实验一:创建型模式设计一、实验目的1、以本实验指导中给定的实验模式为实验实例,掌握五类“创建型模式”的工作原理和应用环境。

2、掌握工厂方法模式(Factory Method)、抽象工厂模式(Abstract Factory)、建造者模式(Builder)、原型模式(Prototype)、单例模式(Singleton)等五类“创建型模式”的实验过程。

二、实验原理1、创建型模式的工作原理创建型模式隐藏了类的实例的创建细节,通过隐藏对象如何被创建和组合在一起达到使整个系统独立的目的。

创建型模式分为:工厂方法模式(Factory Method)、抽象工厂模式(Abstract Factory)、建造者模式(Builder)、原型模式(Prototype)、单例模式(Singleton)等五类。

2、Factory Method模式的工作原理工厂方法模式(Factory Method Pattern):也叫虚拟构造器(Virtual Constructor)模式或者多态工厂(Polymorphic Factory)模式,在工厂方法模式中,工厂父类负责定义创建产品对象的公共接口,而工厂子类则负责生成具体的产品对象,这样做的目的是将产品类的实例化操作延迟到工厂子类中完成。

它的UML类图如下:工厂方法模式包含如下角色:✓Product:抽象产品✓ConcreteProduct:具体产品✓Creator:抽象工厂✓Concrete Creator:具体工厂Factory Method 模式的特点为当系统扩展需要添加新的产品对象时,仅仅需要添加一个具体产品对象以及一个具体工厂对象,原有工厂对象不需要进行任何修改,也不需要修改客户端,很好地符合了“开闭原则”。

设计模式大作业实验报告

设计模式大作业实验报告

蛋糕订购系统一、实验介绍 (3)二、实验环境 (3)三、系统流程 (3)四、系统总类图 (4)五、程序源代码及各个模块子类图 (5)六、程序运行截图 (22)七、实验总结 (22)一、实验介绍本系统使用了简单工厂模式、工厂方法模式、单例模式、门面模式、策略模式、观察者模式一共6种模式实现了从蛋糕店订购订购蛋糕的这样一个系统。

二、实验环境Windows操作系统、MyEclipse10.0、MySQL 5.5、jdk1.6 三、系统流程四、系统总类图五、程序源代码及各个模块子类图(一)测试类Client.java:package net.xsl.ordercake.test;import net.xsl.ordercake.discount.DiscountStyleThree;import net.xsl.ordercake.discount.OrderCake;import net.xsl.ordercake.order.CakeShop;import net.xsl.ordercake.order.EastVilla;import net.xsl.ordercake.order.WestVilla;public class Client {public static void main (String arg[]){CakeShop starCakeShop = CakeShop.getCakeShop();new WestVilla(starCakeShop, "草莓水果");starCakeShop.getNewName("西13");starCakeShop.notifyCustomer();OrderCake cake = new OrderCake();System.out.println("今日促销一律8折优惠");cake.setM(8);cake.setStyle(new DiscountStyleThree());cake.setPrice(80) ;System.out.println("本次订购成功完成,需要支付的金额为"+cake.getMoney(cake.getPrice(),cake.getM())+",原价80");System.out.println("=================================");new EastVilla(starCakeShop, "甜奶");starCakeShop.getNewName("东18");starCakeShop.notifyCustomer();System.out.println("=================================");starCakeShop.getNewName("东12");starCakeShop.notifyCustomer();}}(二)折扣的接口和方法(策略模式):a)接口DiscountStyle.java:package net.xsl.ordercake.discount;public interface DiscountStyle {public double disCount(double price,double m);}b)折方式一DiscountStyleOne.java:package net.xsl.ordercake.discount;public class DiscountStyleOne implements DiscountStyle{public double disCount(double price,double m) {return price;}}c)打折方式二DiscountStyleTwo.java:package net.xsl.ordercake.discount;public class DiscountStyleTwo implements DiscountStyle{public double disCount(double price,double m) {price = price - m;return price;}}d)打着方式三DiscountStyleThree.java:package net.xsl.ordercake.discount;public class DiscountStyleThree implements DiscountStyle{ public double disCount(double price,double m) {price = price * m/10;return price;}}e)订蛋糕对象类,使用了get/set方法OrderCake.java:package net.xsl.ordercake.discount;public class OrderCake {double money,price;//money是打折后的最终价格,price是原价DiscountStyle style;double m;public double getMoney(double price,double m){return style.disCount(price,m);}public void setPrice(double price){this.price = price ;}public double getPrice(){return price;}public void setStyle(DiscountStyle style){this.style = style ;}public DiscountStyle getStyle(){return style;}public void setM(double m){this.m = m ;}public double getM(){return m;}}(三)顾客向蛋糕订购蛋糕(观察者模式),并在具体主题中使用了单例模式a)主题Shop.java:package net.xsl.ordercake.order;public interface Shop {public void addCustomer(Customer o);public void deleteCustomer(Customer o);public void notifyCustomer();}b)具体主题(使用了单例模式,只能创建一个蛋糕商店的对象)CakeShop.java:package net.xsl.ordercake.order;import java.util.ArrayList;public class CakeShop implements Shop{String name;boolean changed;ArrayList<Customer>personList;private int i = 0;private static CakeShop uniqueCakeShop;private CakeShop() {uniqueCakeShop = this;personList = new ArrayList<Customer>();name = "";changed = false;}public static synchronized CakeShop getCakeShop(){if(uniqueCakeShop == null){uniqueCakeShop = new CakeShop();}return uniqueCakeShop;}public void addCustomer(Customer o) {if(!(personList.contains(o)))personList.add(o);}public void deleteCustomer(Customer o) {if((personList.contains(o)))personList.remove(o);}public void notifyCustomer() {if(changed){try{Customer customer = personList.get(i);customer.orderCake(name);i++;changed = false;}catch(Exception e){System.out.println("没有新的订购信息");}}}public void getNewName(String str){if(str.equals(name))changed = false;else{name = str;changed = true;}}}c)观察者Customer.java:package net.xsl.ordercake.order;public interface Customer {public void orderCake(String name);}d)体观察者一EastVilla.java:package net.xsl.ordercake.order;import net.xsl.ordercake.creator.MakeChocolateCake;import net.xsl.ordercake.creator.MakeFruityCake;import net.xsl.ordercake.creator.MakeMilkCake;import net.xsl.ordercake.jdbc.JDBCFacade;import net.xsl.ordercake.product.ChocolateFactory;import net.xsl.ordercake.product.FruitFactory;import kFactory;public class EastVilla implements Customer{Shop shop;private String cakeType;public EastVilla(Shop shop,String cakeType){this.shop = shop;this.cakeType = cakeType;shop.addCustomer(this);}public void orderCake(String name){System.out.println(name+"订了一个"+cakeType+"蛋糕");JDBCFacade dbFacade=new JDBCFacade();String sqlStr = "select * from ordercake";String sqlStr1 = "insert into ordercake(cakeType, name, quantity)"+ " VALUES ('"+cakeType+"','"+name+"','1')";dbFacade.jdbcInsert(sqlStr1);System.out.println("查询插入之后新的数据库");dbFacade.jdbcSelect(sqlStr);if(cakeType.equals("草莓水果") || cakeType.equals("葡萄水果")){MakeFruityCake eastVilla = new MakeFruityCake(cakeType);FruitFactory fruitCake = eastVilla.makeFruityCake();fruitCake.createCake();}else if(cakeType.equals("牛奶巧克力") || cakeType.equals("黑巧克力")){MakeChocolateCake eastVilla1 = newMakeChocolateCake(cakeType);ChocolateFactory chocolateCake =eastVilla1.makeChocolateCake();chocolateCake.createCake();}else if(cakeType.equals("双层鲜奶") || cakeType.equals("甜奶")){MakeMilkCake eastVilla1 = new MakeMilkCake(cakeType);MilkFactory milkCake = eastVilla1.makeMilkCake();milkCake.createCake();}}}e)具体观察者二WestVilla.java:package net.xsl.ordercake.order;import net.xsl.ordercake.creator.MakeChocolateCake;import net.xsl.ordercake.creator.MakeFruityCake;import net.xsl.ordercake.creator.MakeMilkCake;import net.xsl.ordercake.jdbc.JDBCFacade;import net.xsl.ordercake.product.ChocolateFactory;import net.xsl.ordercake.product.FruitFactory;import kFactory;public class WestVilla implements Customer{Shop shop;private String cakeType;public WestVilla(Shop shop,String cakeType){this.shop = shop;this.cakeType = cakeType;shop.addCustomer(this);}public void orderCake(String name){System.out.println(name+"订了一个"+cakeType+"蛋糕");JDBCFacade dbFacade=new JDBCFacade();String sqlStr = "select * from ordercake";String sqlStr1 = "insert into ordercake(cakeType, name, quantity)"+ " VALUES ('"+cakeType+"','"+name+"','1')";dbFacade.jdbcInsert(sqlStr1);System.out.println("查询插入之后新的数据库");dbFacade.jdbcSelect(sqlStr);if(cakeType.equals("草莓水果") || cakeType.equals("葡萄水果")){MakeFruityCake westVilla = new MakeFruityCake(cakeType);FruitFactory fruitCake = westVilla.makeFruityCake();fruitCake.createCake();}else if(cakeType.equals("牛奶巧克力") || cakeType.equals("黑巧克力")){MakeChocolateCake westVilla1 = newMakeChocolateCake(cakeType);ChocolateFactory chocolateCake =westVilla1.makeChocolateCake();chocolateCake.createCake();}else if(cakeType.equals("双层鲜奶") || cakeType.equals("甜奶")){MakeMilkCake westVilla1 = new MakeMilkCake(cakeType);MilkFactory milkCake = westVilla1.makeMilkCake();milkCake.createCake();}}}(四)JDBC(门面模式)JDBCFacade.java:package net.xsl.ordercake.jdbc;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.ResultSetMetaData;import java.sql.SQLException;import java.sql.Statement;public class JDBCFacade {Connection conn = null;Statement stmt = null;ResultSet rs = null;String sqlStr = "";public void createStatement() {try {stmt = conn.createStatement();} catch (SQLException e) {e.printStackTrace();}}public ResultSet jdbcSelect(String sqlStr){this.sqlStr = sqlStr;getConnection();createStatement();try {rs = stmt.executeQuery(sqlStr);ResultSetMetaData rsmd = rs.getMetaData();int j = 0;j = rsmd.getColumnCount();while(rs.next()){for(int i=0;i<j;i++){System.out.print(rs.getString(i+1));System.out.print("\t");}System.out.println();}} catch (SQLException e) {e.printStackTrace();}return rs;}public void jdbcUpdate(String sqlStr) {this.sqlStr = sqlStr;getConnection();createStatement();try {int count = stmt.executeUpdate(sqlStr);System.out.println("表更新 " + count + " 条数据");} catch (SQLException e) {System.out.println("更新数据失败");}}public void jdbcInsert(String sqlStr) {this.sqlStr = sqlStr;getConnection();createStatement();try {int count = stmt.executeUpdate(sqlStr);System.out.println("向表插入 " + count + " 条数据");} catch (SQLException e) {System.out.println("插入数据失败" + e.getMessage());}}public void jdbcDelete(String sqlStr) {this.sqlStr = sqlStr;getConnection();createStatement();try {int count = stmt.executeUpdate(sqlStr);System.out.println("向表删除 " + count + " 条数据");} catch (SQLException e) {System.out.println("删除数据失败");}}public void jdbcClose(){try {rs.close();stmt.close();conn.close();} catch (SQLException e) {e.printStackTrace();}}public Connection getConnection() {try {Class.forName("com.mysql.jdbc.Driver");conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/cakeshop","root","admin");} catch (Exception e) {System.out.println("数据库连接失败" + e.getMessage());}return conn;}}(五)构造蛋糕(工厂方法模式):a)构造者MakeCake.java:package net.xsl.ordercake.creator;public interface MakeCake {}b)具体构造者一MakeChocolateCake.java:package net.xsl.ordercake.creator;import net.xsl.ordercake.product.ChocolateFactory;public class MakeChocolateCake implements MakeCake{ private String cakeType;public MakeChocolateCake(String cakeType){this.cakeType = cakeType;}public ChocolateFactory makeChocolateCake(){return new ChocolateFactory(cakeType);}}c)具体构造者二MakeFruityCake.java:package net.xsl.ordercake.creator;import net.xsl.ordercake.product.FruitFactory;public class MakeFruityCake implements MakeCake{ private String cakeType;public MakeFruityCake(String cakeType){this.cakeType = cakeType;}public FruitFactory makeFruityCake(){return new FruitFactory(cakeType);}}d)具体构造者三MakeMilkCake.java:package net.xsl.ordercake.creator;import kFactory;public class MakeMilkCake implements MakeCake{ private String cakeType;public MakeMilkCake(String cakeType){this.cakeType = cakeType;}public MilkFactory makeMilkCake(){return new MilkFactory(cakeType);}}e)抽象产品Factory.java:package net.xsl.ordercake.product;public interface Factory {public void createCake();}f)具体产品一FruitFactory.java:package net.xsl.ordercake.product;public class FruitFactory implements Factory{ private String cakeType;public FruitFactory(String cakeType){this.cakeType = cakeType;}public void createCake(){try{if (cakeType.equals("草莓水果")){FruityCake strawberryCake = new StrawberryCake();strawberryCake.show();}else if (cakeType.equals("葡萄水果")) {FruityCake grapeCake = new GrapeCake();grapeCake.show();}}catch (Exception e){System.out.println("制作"+cakeType+"蛋糕失败");}}}g)具体产品二MilkFactory.java:package net.xsl.ordercake.product;public class MilkFactory implements Factory{private String cakeType;public MilkFactory(String cakeType){this.cakeType = cakeType;}public void createCake(){try{if (cakeType.equals("双层鲜奶")){MilkCake doubleMilkCake = new DoubleMilkCake();doubleMilkCake.show();}else if (cakeType.equals("甜奶")) {MilkCake sweetMilkCake = new SweetMilkCake();sweetMilkCake.show();}}catch (Exception e){System.out.println("制作"+cakeType+"蛋糕失败");}}}h)具体产品三ChocolateFactory.java:package net.xsl.ordercake.product;public class ChocolateFactory {private String cakeType;public ChocolateFactory(String cakeType){this.cakeType = cakeType ;}public void createCake(){try{if (cakeType.equals("牛奶巧克力")){ChocolateCake milkChocolateCake = new MilkChocolateCake();milkChocolateCake.show();}else if (cakeType.equals("黑巧克力")) {ChocolateCake darkChocolateCake = new DarkChocolateCake();darkChocolateCake.show();}}catch (Exception e){System.out.println("制作"+cakeType+"蛋糕失败");}}}(六)蛋糕工厂(简单工厂模式):a)水果蛋糕:i.FruitFactory.java(第五项构造蛋糕中已贴出):ii.接口类FruityCake.java:package net.xsl.ordercake.product;public interface FruityCake {public void show();}iii.实现接口:StrawberryCake.java:package net.xsl.ordercake.product;public class StrawberryCake implements FruityCake{ public void show() {System.out.println("生产了一个草莓水果蛋糕");}}GrapeCake.java:package net.xsl.ordercake.product;public class GrapeCake implements FruityCake{public void show() {System.out.println("生产了一个葡萄水果蛋糕");}}b)牛奶蛋糕:kFactory.java(第五项构造蛋糕中已贴出):ii.接口类MilkCake.java:package net.xsl.ordercake.product;public interface MilkCake {void show();}iii.实现接口:SweetMilkCake.java:package net.xsl.ordercake.product;public class SweetMilkCake implements MilkCake{ public void show() {System.out.println("生产了一个甜奶蛋糕");}}DoubleMilkCake.java:package net.xsl.ordercake.product;public class DoubleMilkCake implements MilkCake{public void show() {System.out.println("生产了一个双层鲜奶蛋糕");}}c)巧克力蛋糕:i.ChocolateFactory.java(第五项构造蛋糕中已贴出):ii.接口类ChocolateCake.javapackage net.xsl.ordercake.product;public interface ChocolateCake {void show();}iii.实现接口:DarkChocolateCake.java:package net.xsl.ordercake.product;public class DarkChocolateCake implements ChocolateCake{public void show() {System.out.println("生产了一个黑巧克力蛋糕");}}MilkChocolateCake.java:package net.xsl.ordercake.product;public class MilkChocolateCake implements ChocolateCake{public void show() {System.out.println("生产了一个牛奶巧克力蛋糕");}}六、程序运行截图七、实验总结本次实验的实现过程中,对有些模式理解还不是很深刻,后来通过翻阅教科书,研究它的示例程序,还有老师的ppt,其中最重要的是它的类图,最终使用了出来,并把它和其他模式结合在一起。

设计模式实验报告

设计模式实验报告

设计模式实验报告一、实验目的通过本次实验,旨在让学生了解并掌握常见的设计模式,在实际场景中使用设计模式来解决软件设计中的复杂问题。

二、实验内容1.理论研究:学生需要深入研究常见的设计模式,包括创建型、结构型和行为型设计模式,并了解每种设计模式的适用场景和解决方案。

2.实践应用:学生需要选择3种不同类型的设计模式进行实践应用,并编写代码来演示每种设计模式的应用。

三、实验过程1.理论研究在理论研究阶段,我选择了单例模式、适配器模式和策略模式进行深入研究。

1.1单例模式单例模式是一种常用的创建型设计模式。

它保证其中一个类只有一个实例,并提供一个全局访问点来访问这个实例。

单例模式适用于需要频繁创建和销毁对象的场合。

1.2适配器模式适配器模式是一种常用的结构型设计模式。

它将一个类的接口转换成客户希望的另一个接口。

适配器模式可以让不兼容的类能够合作,提供一个统一的接口。

1.3策略模式策略模式是一种常用的行为型设计模式。

它定义一系列算法,将它们封装起来,并且使它们可以相互替换,让算法的变化独立于使用算法的客户。

2.实践应用在实践应用阶段,我选择了Java编写代码来演示每种设计模式的应用。

2.1单例模式应用首先,我创建了一个Singleton类,保证该类只有一个实例。

在该类中声明一个私有静态变量instance,并将构造方法设置为私有,防止在外部创建新的实例。

然后,通过一个公有的静态方法来获取该类的实例。

2.2适配器模式应用接下来,我创建了一个MediaPlayer接口,包含了播放音频和视频的两个方法。

然后,我创建了一个AdvancedMusicPlayer类,实现了播放音频的方法。

接着,我创建了一个MediaPlayerAdapter类,实现了MediaPlayer接口,将AdvancedMusicPlayer适配成MediaPlayer的形式。

使用适配器模式可以让调用方可以统一调用MediaPlayer的接口,无需知道具体使用的是AdvancedMusicPlayer。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验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) 送餐员也是餐厅员工的一种,可以打印送餐说明、记录送餐信息(如送餐时间)以
及记录收费(对于没有注册工资支付的顾客,由送餐员收取现金后记录)。

3. Draw a use case diagram for the following library system:
The library stores various items that can be borrowed, including books and journals. Books can be borrowed by both staff and students, but only staff members can borrow journals. When a user borrows a book, their loan details are checked to ensure that they have no overdue books on loan, and have not already borrowed the maximum permitted number of books.
Users can check their own loan details at any time. Librarians are permitted to check the loan details of any user.
Library users can reserve books that are currently out on loan. If three reservations have already been made for a given book, and a further reservation is made, a new copy will be ordered by the librarian.
4. 某棋牌馆管理系统的基本功能描述如下:
客户可以通过Internet预订座位,如果暂时没有合适的座位则允许客户进入“等候队列”,当有人退订或结账之后将及时通知客户。

此外,该系统还需要为总台服务员提供座位安排以及结账的功能,要求能够支持现金和银行卡两种结账方式。

根据以上功能描述绘制相应的用例图。

5. 某银行准备开发一个网上信用卡管理系统CCMS,该系统的基本功能为:
(1) 信用卡申请。

非信用卡客户填写信用卡申请表,说明所要申请的信用卡类型及申请者的基本信息,提交CCMS登录。

如果信用卡申请被银行接受,客户会收到银行的确认函,并告知用户信用卡的有效期及信贷限额;否则银行会发送一封拒绝函给该客户。

客户收到确认函后,需再次登录CCMS,用信用卡号和密码激活该信用卡。

激活操作结束后,CCMS 将激活通知发送给客户,告知客户其信用卡是否被成功地激活。

(2) 月报表生成。

在每个月第一天的零点,CCMS为每个信用卡客户创建一份月报表,对该客户上月的信用卡交易情况及交易额进行统计。

信用卡客户可以登录CCMS查看月报表,也可以要求CCMS提供打印出的月报表。

(3) 信用卡客户信息管理。

信用卡客户的个人信息可以在CCMS 中进行在线的管理。

每个信用卡客户可以在线查询其个人信息。

(4) 信用卡交易记录。

信用卡客户使用信息卡进行的每一笔交易都会记录在CCMS中。

(5) 交易信息查询。

信用卡客户可以登录CCMS查询并核实其信用卡交易记录及交易额。

构造该系统的用例模型,要求绘制用例图,编写相应的用例文档,还需提供用例追踪矩阵。

6. 根据以下描述绘制状态图:
某销售信息管理系统中销售部员工可以提交订单,刚提交的订单为“初始”状态;系统管理员可以处理订单,如果订单无误,则修改订单为“备货”状态,否则将订单退还给提交订单的销售部员工修改,员工此时可以取消订单;仓库管理员备货完毕后可将订单状态改为“发货”状态;销售部员工在确认客户已经收到货物后,可将订单改为“关闭”状态。

三、实验要求
1. 正确安装PowerDesigner;
2. 熟练使用PowerDesigner绘制用例图和状态图;
3. 需按照用例建模的流程,提供用例图、用例文档和用例追踪矩阵;
4. 使用UML2.X中的标准图符绘制图形,对于一些较为复杂的图形,适当增加文字注释来进行说明;
5. 所绘制图形必须正确、完整,需具有较好的可读性,注意图形中图符和文字大小及布局。

四、实验步骤
1. 安装PowerDesigner15.X;
2. 熟悉PowerDesigner15.X的常用功能;
3. 分析实例场景,识别执行者;
4. 识别用例及用例之间的关系;
5. 使用PowerDesigner15.X绘制用例图;
6. 撰写用例文档;
7. 创建用例追踪矩阵;
8. 使用PowerDesigner15.X绘制状态图。

五、实验报告要求
1. 绘制并提交酒店订房系统用例图;
2. 绘制并提交订餐系统用例图;
3. 绘制并提交图书馆系统(Library System)用例图;
4. 绘制并提交棋牌馆管理系统用例图;
5. 构造网上信用卡管理系统CCMS的用例模型,提交用例图、用例文档和用例追踪矩阵;
6. 绘制并提交销售信息管理系统订单类的状态图;
7. 注意调整图中文字的字体及字号,注意图的整体布局和图的大小,避免使用交叉线。

六、实验结果
1. 酒店订房系统用例图:
2. 订餐系统用例图:
3. 图书馆系统(Library System)用例图:
4. 棋牌馆管理系统用例图:
5. 网上信用卡管理系统CCMS的需求模型:(1) 用例图:
(2) 用例描述文档:
(3) 用例追踪矩阵:
6. 销售信息管理系统订单类的状态图:
七、实验总结
通过这次实验知道了怎么画用例图、类图、活动图、状态图和顺序图。

并知道了画类图时类与类之间的关系如关联、聚合、组合、依赖、继承和实现的作用和意义;也明白了用例图的作用和意义;还有状态图、顺序图和活动图这些以前都没怎么画过的图这次明白了怎么画。

本次实验收获很大。

相关文档
最新文档