版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、central south university软件体系结构实验报告实验名称学生姓名学生学号专业班级指导教师完成时间设计模式实验二xxx软件工程 1007 班 刘伟2012 年 12 月 25 日1实验三设计模式实验二一、实验目的熟练使用 powerdesigner 和任意一种面向对象编程语言实现几种常见的设计模式,包括 外观模式、代理模式、职责链模式、命令模式、迭代器模式、观察者模式、策略模式和模板 方法模式,理解每一种设计模式的模式动机,掌握模式结构,学习如何使用代码实现这些模 式,并学会分析这些模式的使用效果。二、实验内容使用 powerdesigner 和任意一种面向对象编程语言实现外
2、观模式、代理模式、职责链模 式、命令模式、迭代器模式、观察者模式、策略模式和模板方法模式,包括根据实例绘制模 式结构图、编写模式实例实现代码,运行并测试模式实例代码。(1) 外观模式某软件公司为新开发的智能手机控制与管理软件提供了一键备份功能,通过该功能可以 将原本存储在手机中的通信录、短信、照片、歌曲等资料一次性全部拷贝到移动存储介质(例 如 mmc 卡或 sd 卡)中。在实现过程中需要与多个已有的类进行交互,例如通讯录管理类、 短信管理类等,为了降低系统的耦合度,试使用外观模式来设计并编程模拟实现该一键备份 功能。(2) 代理模式在某应用软件中需要记录业务方法的调用日志,在不修改现有业务类
3、的基础上为每一个 类提供一个日志记录代理类,在代理类中输出日志,如在业务方法 method()调用之前输出“方 法 method()被调用,调用时间为 2010-10-10 10:10:10”,调用之后如果没有抛异常则输出“方 法 method()成功调用”,否则输出“方法 method()调用失败”。在代理类中调用真实业务类的 业务方法,使用代理模式设计该日志记录功能的结构,绘制类图并编程模拟实现。(3) 职责链模式某企业的 scm(supply chain management,供应链管理)系统中包含一个采购审批子系 统。该企业的采购审批是分级进行的,即根据采购金额的不同由不同层次的主管人
4、员来审批, 主任可以审批 5 万元以下(不包括 5 万元)的采购单,副董事长可以审批 5 万元至 10 万元 (不包括 10 万元)的采购单,董事长可以审批10 万元至 50 万元(不包括 50 万元)的采购 单,50 万元及以上的采购单就需要开董事会讨论决定。试使用职责链模式设计并实现该系 统。(4) 命令模式某软件公司欲开发一个基于 windows 平台的公告板系统。系统提供一个主菜单(menu), 在主菜单中包含了一些菜单项(menuitem),可以通过 menu 类的 addmenuitem()方法增加菜 单项。菜单项的主要方法是 click(),每一个菜单项包含一个抽象命令类,具体命
5、令类包括2opencommand(打开命令),createcommand(新建命令),editcommand(编辑命令)等, 命令类具有一个 execute()方法,用于调用公告板系统界面类(boardscreen)的 open()、create()、 edit()等方法。试使用命令模式设计该系统,使得 menuitem 类与 boardscreen 类的耦合度降 低,绘制类图并编程模拟实现。(5) 迭代器模式在某在线购物系统的购物车(shopping cart)中包含了一个存储商品名称的字符串数组, 现需要自定义一个双向迭代器(myiterator)实现对该商品名称数组的双向(前向和后向)遍
6、历。 绘制类图并编程模拟实现(要求定义抽象层)。(6) 观察者模式某在线股票软件需要提供如下功能:当股票购买者所购买的某支股票价格变化幅度达到 5%时,系统将自动发送通知(包括新价格)给购买该股票的股民。现使用观察者模式设计 该系统,绘制类图并编程模拟实现(要求定义抽象层)。(7) 策略模式某软件公司欲开发一款飞机模拟系统,该系统主要模拟不同种类飞机的飞行特征与起飞 特征,需要模拟的飞机种类及其特征如表 1 所示:表 1 飞机种类及特征一览表飞机种类 直升机(helicopter) 客机(airplane)起飞特征垂直起飞(verticaltakeoff) 长距离起飞(longdistance
7、takeoff)飞行特征亚音速飞行(subsonicfly) 亚音速飞行(subsonicfly)歼击机(fighter)长距离起飞(longdistancetakeoff) 超音速飞行(supersonicfly)鹞式战斗机(harrier)垂直起飞(verticaltakeoff)超音速飞行(supersonicfly)为将来能够模拟更多种类的飞机,试采用策略模式设计并模拟实现该飞机模拟系统。 (8) 模板方法模式某软件公司欲为某银行的业务支撑系统开发一个利息计算模块,利息计算流程如下: i. 系统根据账号和密码验证用户信息,如果用户信息错误,系统显示出错提示;ii. 如果用户信息正确,则
8、根据用户类型的不同使用不同的利息计算公式计算利息(如 活期账户和定期账户具有不同的利息计算公式);iii. 系统显示利息。试使用模板方法模式设计并模拟实现该利息计算模块。三、实验要求1. 正确无误绘制外观模式、代理模式、职责链模式、命令模式、迭代器模式、观察者 模式、策略模式和模板方法模式实例的模式结构图;2. 使用任意一种面向对象编程语言实现外观模式、代理模式、职责链模式、命令模式、 迭代器模式、观察者模式、策略模式和模板方法模式实例,代码运行正确无误。3四、实验步骤1. 进一步熟悉 powerdesigner15 的常用功能;2. 使用 powerdesigner 绘制外观模式实例结构图并
9、用面向对象编程语言实现该模式实 例;3. 使用 powerdesigner 绘制代理模式实例结构图并用面向对象编程语言实现该模式实 例;4. 使用 powerdesigner 绘制职责链模式实例结构图并用面向对象编程语言实现该模式 实例;5. 使用 powerdesigner 绘制命令模式实例结构图并用面向对象编程语言实现该模式实 例;6. 使用 powerdesigner 绘制迭代器模式实例结构图并用面向对象编程语言实现该模式 实例;7. 使用 powerdesigner 绘制观察者模式实例结构图并用面向对象编程语言实现该模式 实例;8. 使用 powerdesigner 绘制策略模式实例结
10、构图并用面向对象编程语言实现该模式实 例;9. 使用 powerdesigner 绘制模板方法模式实例结构图并用面向对象编程语言实现该模 式实例。五、实验报告要求1. 提供外观模式实例结构图及实现代码;2. 提供代理模式实例结构图及实现代码;3. 提供职责链模式实例结构图及实现代码;4. 提供命令模式实例结构图及实现代码;5. 提供迭代器模式实例结构图及实现代码;6. 提供观察者模式实例结构图及实现代码;7. 提供策略模式实例结构图及实现代码;8. 提供模板方法模式实例结构图及实现代码;9. 注意调整类图中文字的字体及字号,注意图的整体布局和图的大小,避免使用交叉 线,注意代码字体和颜色,代码
11、字体需一致,颜色需统一;10. 认真写好实验总结;11. 提交电子版实验报告,格式为“学号-姓名-实验 3.doc”,如“060102-张三-实验 3.doc”, 所有材料(包括类图和源代码)均放在一个word 文件中,格式为 doc 或 docx,不需要提交 powerdeigner 所保存的 oom 模型,也无须单独提交源代码。4六、实验结果 1. 类图:-smssongcontactphotobackupfacade: smsmanager: songsmanager: contactmanager: photomanagersmsmanager+ onekeybackup () : v
12、oid+ backupfacade ()+ onekeybackup () : void.songsmanager+ onekeybackup () : voidcontactmanager+ onekeybackup () : voidphotomanager+ onekeybackup () : void实现代码:client.javapackage dm.facade;public class client public static void main(string args) backupfacade bf = new backupfacade(); bf.onekeybackup(
13、);backupfacade.javapackage dm.facade;public class backupfacade private smsmanager sms;private songsmanager song;private contactmanager contact;private photomanager photo;public backupfacade() sms = new smsmanager();song = new songsmanager();contact = new contactmanager();photo = new photomanager();5
14、public void onekeybackup() sms.onekeybackup();song.onekeybackup();contact.onekeybackup();photo.onekeybackup();smsmanager.javapackage dm.facade;public class smsmanager public void onekeybackup() system.out.println(sms backup over);songsmanager.javapackage dm.facade;public class songsmanager public vo
15、id onekeybackup() system.out.println(songs backup over);photomanager.javapackage dm.facade;public class photomanager public void onekeybackup() / todo: implementsystem.out.println(photo backup over);6contactmanager.javapackage dm.facade;public class contactmanager public void onekeybackup() system.o
16、ut.println(contact backup over);2. 类图:service+ method () : void .proxy- service : realservice+ method () : voidrealservice+ method () : void实现代码: client.javapackage xy;public class client .public static void main(string args) service service;service = new proxy();service.method();proxy.javapac
17、kage xy;public class proxy implements service private realservice service = new realservice(); public void method() service.method();7service.javapackage xy;public interface service void method();realservice.javapackage xy;import java.text.simpledateformat;import java.util.date;imp
18、ort java.util.random;public class realservice implements service public void method() try date date = new date();/ format 对象是用来以指定的时间格式格式化时间的simpledateformat from = new simpledateformat(yyyy-mm-dd hh:mm:ss); /这里的格式可以自己设置/ format()方法是用来格式化时间的方法string times = from.format(date);system.out.println(方法 me
19、thod()被调用,调用时间为: + times);/用来产生除零异常来模拟 method 方法调用是否成功random random = new random();int a = random.nextint(100);int b = random.nextint(10);suppresswarnings(unused)int c = a/b;system.out.println(方法 method()成功调用); catch (exception e) / todo: handle exceptionsystem.out.println(方法 method()调用失败);83. 类图:pu
20、rchaserequest- billmoney: double- reason : string+ purchaserequest ()+ getbillmoney () : double + setbillmoney (double newbillmoney):void.leaderabstract- name : string- successor: leader+ setseccessor (leader seccessor): void+ leader (string name)+ handlerequest (purchaserequest: voidrequest).direct
21、or + director (string name)+ handlerequest (purchaserequest: voidrequest).generalmanager+ generalmanager (string name)+ handlerequest (purchaserequest: voidrequest).manager+ manager (string name)+ handlerequest (purchaserequest: voidrequest).实现代码:client.javapackage dm.chainofresponsibility;public cl
22、ass client public static void main(string args) leader objdirector, objdepartmentmanager, objgeneralmanager;objdirector = new director(张三);objdepartmentmanager = new manager(李四);objgeneralmanager = new generalmanager(王五);objdirector.setsuccessor(objdepartmentmanager);objdepartmentmanager.setsuccesso
23、r(objgeneralmanager);system.out.println(-);purchaserequest shopping1 = new purchaserequest(10000.00, 购买打印纸); objdirector.handlerequest(shopping1);system.out.println(-);purchaserequest shopping2 = new purchaserequest(80000.00, 办公室配置空调);9objdirector.handlerequest(shopping2);system.out.println(-);purch
24、aserequest shopping3 = new purchaserequest(150000.00, 车间维修); objdirector.handlerequest(shopping3);system.out.println(-);purchaserequest shopping4 = new purchaserequest(10000000.00, 收购 rl 公司); objdirector.handlerequest(shopping4);system.out.println(-);purchaserequest.javapackage dm.chainofresponsibil
25、ity;public class purchaserequest private double billmoney;private string reason;public purchaserequest(double billmoney, string reason) this.billmoney = billmoney;this.reason = reason;public double getbillmoney() return billmoney;public void setbillmoney(double billmoney) this.billmoney = billmoney;
26、public string getreason() return reason;public void setreason(string reason) this.reason = reason;10leader.javapackage dm.chainofresponsibility;public abstract class leader protected string name;protected leader successor;public void setsuccessor(leader seccessor) this.successor = seccessor;public l
27、eader(string name) = name;public abstract void handlerequest(purchaserequest request);manager.javapackage dm.chainofresponsibility;public class manager extends leader public manager(string name) super(name);public void handlerequest(purchaserequest request) if (request.getbillmoney() 10000
28、0.00) system.out.println(总经理 + name + 处理物资采购: + request.getreason()+ ,批准采购资金为: + request.getbillmoney() + rmb); else if (this.successor != null) this.successor.handlerequest(request);11generalmanager.javapackage dm.chainofresponsibility;public class generalmanager extends leader public generalmanage
29、r(string name) super(name);public void handlerequest(purchaserequest request) if (request.getbillmoney() 500000.00) system.out.println(总经理 + name + 处理物资采购: + request.getreason()+ ,批准采购资金为: + request.getbillmoney() + rmb); else system.out.println(董事会将开会处理物资采购: + request.getreason()+ ,批准采购资金为: + reque
30、st.getbillmoney() + rmb);director.javapackage dm.chainofresponsibility;public class director extends leader public director(string name) super(name);public void handlerequest(purchaserequest request) if (request.getbillmoney() 50000.00) system.out.println(主任 + name + 处理物资采购: + request.getreason()+ ,
31、批准采购资金为: + request.getbillmoney() + rmb); else if (this.successor != null) 12this.successor.handlerequest(request);4. 类图:menu- menuitemlist : arraylist+ addmenuitem (menuitem item) : void+ getmenuitembyname (string itemname) : menuitem .1.10.*menuitem- itemname : string- command : command+click () m
32、enuitem (string name, command cmd) getitemname () setitemname (string newitemname) getcommand () setcommand (command newcommand).1.11.1command+ execute () : void.: void: string: void: command: voideditcommand- myboardscreen : boardscreen+ execute () : void.1.1实现代码: client.javapackage mand;public cla
33、ss client opencommand- myboardscreen : boardscreen+ execute () : void.1.1 1.1boardscreen1.1+ open () : void1.1+ create () : void+ edit () : void.createcommand- myboardscreen : boardscreen+ execute () : void.1.1public static void main(string args) boardscreen screen = new boardscreen();menu menu = ne
34、w menu();menuitem open = new menuitem(open, new opencommand(screen);13menuitem create = new menuitem(create, new createcommand(screen); menuitem edit = new menuitem(edit, new editcommand(screen); menu.addmenuitem(open);menu.addmenuitem(create);menu.addmenuitem(edit);menu.getmenuitembyname(open).clic
35、k();menu.getmenuitembyname(create).click();menu.getmenuitembyname(edit).click();menu.javapackage mand;import java.util.*;public class menu private arraylist menuitemlist = new arraylist(); public void addmenuitem(menuitem item) / todo: implementthis.menuitemlist.add(item);public menuitem getmenuitem
36、byname(string itemname) / todo: implementfor (int i = 0; i menuitemlist.size(); i+) if (menuitemlist.get(i).getitemname().equals(itemname) return menuitemlist.get(i);return null;menuitem.javapackage mand;public class menuitem 14private string itemname;private command command;public void click() / to
37、do: implementsystem.out.println(menuitem + this.itemname + clicked!); mand.execute();public menuitem(string name, command cmd) / todo: implementmand = cmd;this.itemname = name;public string getitemname() return itemname;public void setitemname(string newitemname) itemname = newitemname;public comman
38、d getcommand() return command;public void setcommand(command newcommand) mand = newcommand;command.javapackage mand;public interface command 15void execute();createcommand.javapackage mand;public class createcommand implements command private boardscreen myboardscreen;public createcommand(boardscree
39、n myboardscreen) this.myboardscreen = myboardscreen;public void execute() / todo: implementmyboardscreen.create();editcommand.javapackage mand;public class editcommand implements command private boardscreen myboardscreen;public editcommand(boardscreen myboardscreen)this.myboardscreen = myboardscreen
40、;public void execute() / todo: implementmyboardscreen.edit(); opencommand.javapackage mand;public class opencommand implements command 16private boardscreen myboardscreen;public opencommand(boardscreen myboardscreen) this.myboardscreen = myboardscreen;public void execute() / todo: implementmyboardsc
41、reen.open();boardscreen.javapackage mand;public class boardscreen public void open() / todo: implementsystem.out.println(boardscreen opened!);public void create() / todo: implementsystem.out.println(boardscreen create!);public void edit() / todo: implementsystem.out.println(boardscreen edit!);175. 类
42、图:myiteratormycollection+ createiterator () : myiterator .+first ()last ()hasnext ()hasprevious ()next ()previous ()isfirst ()islast ()getcurrentitem (): void: void: boolean: boolean: void: void: boolean: boolean: object.newiterator- currentindex : intnewcollection- obj : object+ createiterator () :
43、 myiterator.+first ()last ()hasnext ()hasprevious ()next ()previous ()isfirst ()islast ()getcurrentitem (): void: void: boolean: boolean: void: void: boolean: boolean: object.实现代码:client.javapackage dm.iterator;public class client public static void main(string args) mycollection collection = new ne
44、wcollection(); myiterator i = collection.createiterator(); system.out.println(正向遍历-); i.first();system.out.print(i.getcurrentitem().tostring() + );while (i.hasnext() i.next();system.out.print(i.getcurrentitem().tostring() + );system.out.println(n 逆向遍历-); i.last();system.out.print(i.getcurrentitem().
45、tostring() + );while (i.hasprevious() i.previous();system.out.print(i.getcurrentitem().tostring() + );18system.out.println();myiterator.javapackage dm.iterator;public interface myiterator void first();void last();boolean hasnext();boolean hasprevious();void next();void previous();boolean isfirst();b
46、oolean islast();object getcurrentitem();mycollection.javapackage dm.iterator;public interface mycollection myiterator createiterator();newcollection.java package dm.iterator;public class newcollection implements mycollection private object obj = i, p, h, o, n, e ;public myiterator createiterator() / todo: implementreturn new newiterator();19/ 内部类迭代器public class newiterator implements myiterator private int currentindex = 0;public void first() / todo: imple
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年人教版初中七年级语文下册现代文拓展探究卷含答案
- 深度解析(2026)《GBT 3409.1-2008大坝监测仪器 钢筋计 第1部分:差动电阻式钢筋计》
- 《JBT 10776-2007 220kV单相牵引变压器》专题研究报告
- 2026年法考刑诉违法所得没收卷含答案
- 2026高一历史上册第四单元第一次月考含答案及解析
- 《JBT 10523-2005管壳式换热器用横槽换热管》专题研究报告
- 2025至2026学年高二数学下册第一次月考含答案及解析
- 湖南高考:语文高频考点大全
- 湖北中考:政治必考知识点总结
- 2026年党员干部党章党规党纪知识竞赛试卷及答案(十二)
- ktv上班合同范本
- 果糖胺检测的临床意义
- JJG646-2006移液器检定规程
- 雨课堂学堂在线学堂云《The Principle of Auditing( 西财)》单元测试考核答案
- 小儿包茎科普宣讲
- (2025年)地质实验测试师笔试试题及答案
- 2025年朱元璋传-课件
- 成人手术后疼痛评估与护理团标解读
- 部门年度绩效考核责任书模板
- AIGC技术在动画电影创作中的应用与效果分析
- 五类人员笔试真题及答案
评论
0/150
提交评论