ImageVerifierCode 换一换
格式:DOCX , 页数:30 ,大小:22.44KB ,
资源ID:10187453      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/10187453.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(中南大学软件体系结构设计模式实验二全解只是分享.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

中南大学软件体系结构设计模式实验二全解只是分享.docx

1、中南大学软件体系结构设计模式实验二全解只是分享学习 - 好资料软件体系结构实验报告项目名称 设计模式实验 2专业班级学 号姓 名实验成绩:更多精品文档学习 - 好资料批阅教师:年 月 日更多精品文档学习 - 好资料实验 3 设计模式实验二实验学时:4每组人数:1实验类型:3( 1:基础性2:综合性3:设计性4:研究性)实验要求:1( 1:必修2:选修3:其它)实验类别:3( 1:基础2:专业基础3:专业4:其它)一、实验目的熟练使用 PowerDesigner 和任意一种面向对象编程语言实现几种常见的行为型设计模式,包括职责链模式、 命令模式、 观察者模式和策略模式, 理解每一种设计模式的模式

2、动机,掌握模式结构,学习如何使用代码实现这些模式。二、实验内容1.某企业的 SCM(Supply Chain Management,供应链管理 )系统中包含一个采购审批子系统。该企业的采购审批是分级进行的, 即根据采购金额的不同由不同层次的主管人员来审批,主任可以审批 5 万元以下(不包括 5 万元)的采购单,副董事长可以审批 5 万元至 10万元(不包括 10 万元)的采购单,董事长可以审批 10 万元至 50 万元(不包括 50 万元)的采购单, 50 万元及以上的采购单就需要开董事会讨论决定。如下图所示:金额 5万元 5万元金额 10万元 10万元金额 50万元 金额 50万元采购单采购

3、人员 主任 副董事长 董事长 董事会试使用职责链模式设计并模拟实现该系统。2.房间中的开关是命令模式的一个实例,现用命令模式来模拟开关的功能,可控制对象包括电灯和电风扇,绘制相应的类图并编程模拟实现。3.某软件公司欲开发一个基于Windows 平台的公告板系统。系统提供一个主菜单(Menu) ,在主菜单中包含了一些菜单项 (MenuItem) ,可以通过 Menu 类的 addMenuItem() 方法增加菜单项。菜单项的主要方法是 click() ,每一个菜单项包含一个抽象命令类,具体命令类包括 OpenCommand( 打开命令 ),CreateCommand(新建命令 ),EditCom

4、mand( 编辑命令 )等,命令类具有一个 execute()方法,用于调用公告板系统界面类 (BoardScreen)的 open()、create()、edit() 等方法。现使用命令模式设计该系统,使得 MenuItem 类与 BoardScreen 类的耦合度降低,绘制类图并编程实现。更多精品文档学习 - 好资料4.某实时在线股票软件需要提供如下功能:当股票购买者所购买的某支股票价格变化幅度达到 5%时,系统将自动发送通知(包括新价格)给购买该股票的所有股民。试使用观察者模式设计并实现该系统,要求绘制相应的类图并编程模拟实现。5.某公司欲开发一套机房监控系统,如果机房达到某一指定温度,

5、温度传感器(Thermosensor)将自动传递信号给各种响应设备, 例如警示灯 (CautionLight) 将闪烁 (flicker() 、报警器 (Annunciator) 将发出警报 (alarm() 、安全逃生门 (SecurityDoor) 将自动开启 (open() 、隔热门 (InsulatedDoor) 将自动关闭 (close() 等,每一种响应设备的行为由专门的程序来控制。 为了将来能够方便地引入新类型的响应设备, 采用观察者模式和适配器模式设计并模拟实现该系统。6.某软件公司为某电影院开发了一套影院售票系统,在该系统中需要为不同类型的用户提供不同的电影票 (MovieT

6、icket) 打折 (Discount) 方式,具体打折方案如下:(1)学生凭学生证可享受票价8 折优惠;(2)年龄在 10 周岁及以下的儿童可享受每张票减免10 元的优惠(原始票价需大于等于20元);(3) 影院 VIP 用户除享受票价半价优惠外还可进行积分, 积分累计到一定额度可换取电影院赠送的奖品。该系统在将来可能还要根据需要引入新的打折方式。试使用策略模式设计并编程模拟实现该影院售票系统。7.为了实现一些特殊的显示效果,某公司欲开发一款手机数码照片处理软件,在该软件中为照片 (Photograph)提供了多种滤镜 (Filter) 效果,例如黑白滤镜 (BlackWhiteFilter

7、) 、单色滤镜 (MonochromaticFilter) 、怀旧滤镜 (NostalgicFilter) 等,不同的滤镜通过不同的算法对照片进行美化,如下图所示。该软件可以灵活地增加一些新的滤镜效果。选择一种合适的设计模式来设计该照片处理软件, 结合场景绘制相应的类图并编程模拟实现。更多精品文档学习 - 好资料三、实验要求1.结合实例,正确无误地绘制职责链模式、命令模式、观察者模式和策略模式的模式结构图;2.使用任意一种面向对象编程语言实现职责链模式、命令模式、观察者模式和策略模式实例,代码运行正确无误。四、实验步骤1.结合实例,使用 PowerDesigner 绘制职责链模式实例结构图并用

8、面向对象编程语言实现该模式实例;2.结合实例,使用 PowerDesigner 绘制命令模式实例结构图并用面向对象编程语言实现该模式实例;3.结合实例,使用 PowerDesigner 绘制命令模式实例结构图并用面向对象编程语言实现该模式实例;4.结合实例,使用 PowerDesigner 绘制观察者模式实例结构图并用面向对象编程语言实现该模式实例;5.结合实例,使用 PowerDesigner 绘制观察者模式实例结构图并用面向对象编程语言实现该模式实例;6.结合实例,使用 PowerDesigner 绘制策略模式实例结构图并用面向对象编程语言实现该模式实例;7.结合实例,使用 PowerDe

9、signer 绘制策略模式实例结构图并用面向对象编程语言实现该模式实例。五、实验结果1.类图:PurchaseRequestApprover-amount: double-successor: Approver-number: int+setSuccessor (Approver aSuccessor): void-prupose: String+processRequest (: voidPurchaseRequest qRequest).CongressDirectorVicePresident President更多精品文档学习 - 好资料实现代码:public class Purcha

10、seRequest public double amount;public int number;public String purpose;public double getAmount() return amount;public void setAmount( double amount) this.amount = amount;public int getNumber() return number;public void setNumber(int number) this.number = number;public String getPurpose() return purp

11、ose;public void setPurpose(String purpose) this.purpose = purpose;public class Approver protected Approver succesor;public Approver()succesor = null;public void processRequest(PurchaseRequest aRequest)if(succesor!= null)succesor.processRequest(aRequest);public void setSuccesor(Approver succesor) thi

12、s.succesor = succesor;public class Congress extends Approver 更多精品文档学习 - 好资料public void processRequest(PurchaseRequest request)if(request.getAmount()=500000)System.out.println( 董事会 );public class Director extends Approver public void processRequest(PurchaseRequest request)if(request.getAmount()50000)

13、System.out.println( 主任 ); elseif(this.succesor!=null)this.succesor.processRequest(request);public class President extends Approverpublic void processRequest(PurchaseRequest request)if(request.getAmount()500000)System.out.println( 董事长 ); elseif(this.succesor!=null)this.succesor.processRequest(request

14、);public class VicePresident extends Approverpublic void processRequest(PurchaseRequest request)if(request.getAmount()100000)System.out.println( 副董事长 ); elseif(this.succesor!=null)this.succesor.processRequest(request);更多精品文档学习 - 好资料2. 类图:ClientSwitchcommand: AbstractCommand-+open (): void+close ():

15、void.AbstractCommandabstract+ excute () : void.LightLightCommandFunCommand-light: Light-fun : Fun+open (): void+excute (): void+excute (): void+close (): void.实现代码:public abstract classAbstractCommand public abstract void open();public abstract void close();public class Switch private AbstractComman

16、d command;public void setCommand(AbstractCommand command) mand = command;public void open()command.open();public void close()command.close();public class Fun public void open()System.out.println( 开风扇 );public void close()System.out.println( 关风扇 );Fun+ open () : void+ close () : void.更多精品文档学习 - 好资料pu

17、blic class Light public void open()System.out.println( 打开 );public void close()System.out.println( 关灯 );public class FunCommand extends AbstractCommand private Fun fun = new Fun();Overridepublic void open() /TODO Auto-generated method stub fun.open();Overridepublic void close() /TODO Auto-generated

18、method stub fun.close();public class LightCommand extends AbstractCommandprivate Light light = new Light();Overridepublic void open() /TODO Auto-generated method stub light.open();Overridepublic void close() /TODO Auto-generated method stub light.close();更多精品文档学习 - 好资料3.类图:BoardScreen-menu : Menu+Bo

19、ardScreen ()+display (): void+open (): void+create (): void+edit (): void.Menu- itemList : ArrayList+ addMenuItem (MenuItem item) : voidMenuItem- name : String-command : Command+ MenuItem (String name)+getName (): String+setName (): void+getCommand (): Command+setCommand (Command command) : void+cli

20、ck (): void.Command+ excute () : void.OpenCommandEditCommand-screen: BoardScreen-screen: BoardScreen+OpenCommand (BoardScreen screen)+EditCommand (EditCommand screen)+excute (): void.+excute (): void.CreateCommand-screen : BoardScreen+ CreateCommand (BoardScreen screen)+ excute () : void.实现代码:public

21、 interface Command public void excute();public class MenuItem private String name;private Command command;public MenuItem(String name)this.name = name;public String getName() return name;public void setName(String name) this.name = name;public Command getCommand() return command;更多精品文档学习 - 好资料public

22、 void setCommand(Command command) mand = command;public void click()command.excute();import java.util.ArrayList;public class Menu public ArrayList itemList = new ArrayList();public void addMenuItem(MenuItem item)itemList.add(item);public class OpenCommand implements Command private BoardScreen scree

23、n;public OpenCommand(BoardScreen screen) super();this.screen = screen;Overridepublic void excute() /TODO Auto-generated method stub screen.open();public class CreateCommand implements Command private BoardScreen screen;public CreateCommand(BoardScreen screen) super();this.screen = screen;Overridepub

24、lic void excute() 更多精品文档学习 - 好资料/TODO Auto-generated method stub screen.create();public class EidtCommand implements Command private BoardScreen screen;public EidtCommand(BoardScreen screen) super();this.screen = screen;Overridepublic void excute() /TODO Auto-generated method stub screen.edit();publ

25、ic class BoardScreen private Menu menu;private MenuItem openItem,createItem,editItem;public BoardScreen()menu = new Menu();openItem = new MenuItem( 打开 );createItem = new MenuItem( 新建 );editItem = new MenuItem( 编辑 );menu.addMenuItem(openItem);menu.addMenuItem(createItem);menu.addMenuItem(editItem);pu

26、blic void display()System.out.println( 主菜单选项: );for (Object obj : menu.itemList)System.out.println(MenuItem)obj).getName();public void open()System.out.println( 显示打开窗口! );更多精品文档学习 - 好资料public void create()System.out.println( 显示新建窗口! );public void edit()System.out.println( 显示编辑窗口! );public Menu getMenu()return menu;4.类图:Stock- investors : ArrayList-stockName : String-price: double+Stock ()+attach (Investor inestor): void+detach (Investor investor): void+nitifyInvestor (): void.Investor+ response (Stock stock) : void.ConcreteInvestor-name : String+ response (Stock stock) : v

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1