版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
《软件体系构造》
试验汇报
项目名称设计模式试验2
专业班级___________
学号____________
姓名_____________
试验成绩:
批阅教师:
年月日
试验3设计模式试验二
试验课时:_____4____
每组人数:_]
试验类型:_3_(1:基础性2:综合性3:设计性4:研究性)
试验规定:_1_(1:必修2:选修3:其他)
试验类别:_3(1:基础2:专业基础3:专业4:其他)
一、试验目的
纯熟使用PowerDesigner和任意一种面向对象编程语言实现几种常见的行为型设计模
式,包括职责链模式、命令模式、观测者模式和方略模式,理解每一种设计模式的模式动机,
掌握模式构造,学习怎样使用代码实现这些模式。
二、试验内容
1.某企业『口SCM(SupplyChainManagement,供应链管理)系统中包括一种采购审批子
系统。该企业日勺采购审批是分级进行的I,即根据采购金额的不一样由不一样层次的主管人员
来审批,主任可以审批5万元如下(不包括5万元)的J采购单,副董事长可以审批5万元至
10万元(不包括10万元)时采购单,董事长可以审批10万元至50万元(不包括50万元)
的采购单,5()万元及以上的采购单就需要开荒事会讨论决定。如卜.图所示:
金额V5万元5万元W金额V10万元10万元《金额〈50万元金额力50万元
采购人员主任副董事长董事长董事会
试使用职责链模式设计并模拟实现该系统。
2.房间中的开关是命令模式的一种实例,现用命令模式来模拟开关的功能,可控制对
象包括电灯和电风扇,绘制对应H勺类图并编程模拟实现。
3.某软件企业欲开发一种基于Windows平台的公告板系统。系统提供一种主菜单
(Menu),在主菜单中包括了某些菜单项(Menuitem),可以通过Menu类区JaddMenuheirO措
施增长菜单项。菜单项"勺重要措施是click。,每一种菜单项包括一种抽象命令类,详细命令
类包括OpenCommand(打开命令),CreateCommand(新建命令),EditCommand(编辑命令)等,
命令类具有一种execute。措施,用于调用公告板系统界面类(BoardScreen)的Jopen()^create。、
edit。等措施。现使用命令模式设计该系统,使得Menuhem类与BoardScreen类的耦合度减
少,绘制类图并编程实现,
4.某实时在线股票软件需要提供如卜.功能:当股票购置者所购置的某支股票价格变化
幅度到达5%时,系统将自动发送告知(包括新价格)给购置该股票的所有股民。试使用观
测者模式设计并实现该系统,规定绘制对应的类图并编程模拟实现。
5.某企业欲开发一套机房监控系统,假如机房到达某一指定温度,温度传感器
(Thermosensor)将自动传递信号给多种响应设备,例如警示灯(CautionLighi)将闪烁(flicker。)、
报警器(Annunciator)将发出警报(alarm。)、安全逃生门(SecurityDoor)将自动启动(open。]、隔
热门(InsulatedDoor)将自动关闭(close。)等,每一种响应设备的行为由专门的程序来控制。为
了未来可以以便地引入新类型口勺响应设备,采用观测者模式和适配器模式设计并模拟实现该
系统。
实现。
三、试验规定
1.结合实例,对的无误地绘制职责链模式、命令模式、观测者模式和方略模式的模式
构造图;
2.使用任意一种面向对象编程语言实现职责链模式、命令模式、观测者模式和方略模
式实例,代码运行对的无误。
四、试验环节
1.结合实例,使用PowerDesigner绘制职责链模式实例构造图并用面向对象编程语言实
现该模式实例;
2.结合实例,使用PowerDesigner绘制命令模式实例构造图并用面向对象编程语言实现
该模式实例;
3.结合实例,使用PowerDesigner绘制命令模式实例构造图并用面向对象编程语言实现
该模式实例;
4.结合实例,使用PowerDesigner绘制观测者模式实例构造图并用面向对象编程语言实
现该模式实例;
5.结合实例,使用PowerDesigner绘制观测者模式实例构造图并用面向对象编程语言实
现该模式实例;
6.结合实例,使用PowerDesigner绘制方略模式实例构造图并用面向对象编程语言实现
该模式实例;
7.结合实例,使用PowerDesigner绘制方略模式实例构造图并用面向对象编程语言实现
该模式实例。
五、试验成果
1.类图:
___________________________w
PurchaseRequestApprover
amount:double-successor:Approver
number:int+setSuccessor(AporoveraSuccessor):void
prupose:String
+processRequest(:void
PurchaseRequest^Request)
实现代码:
publicclassPurchaseRequest{
publicdoubleamount;
publicintnumber;
publicStringpurpose;
publicdoublegetAmount(){
returnamount;
}
publicvoidse(Amoun((doubleamount){
this.amount=amount;
)
publicintgetNumber(){
returnnumber;
)
publicvoidsctNumbcr(intnumber){
this.number=number;
I
publicStringgetPurpose(){
returnpuipose;
I
publicvoidsetPurpose(Stringpurpose){
this.purpose=purpose;
publicclassApprover{
protectedApproversuccesor;
publicApprover(){
succesor=null;
)
publicvoidprocessRequest(PurchaseRequestaRequest){
if(succcsor!=null){
cessRequesl(aRequest);
}
)
publicvoidsetSuccesor(Approversuccesor){
this.succesor=succesor;
publicclassCongressextendsApprover{
publicvoidprocessRcquest(PurchascRcqiicstrequest]{
if(request.gelAmounl()>=500000){
System.o〃/.prinUn("董事会");
publicclassDirectorextendsApprover{
publicvoidprocessRequest(PurchaseReques(request;{
if(request.getAmount()<50000){
System.。”上println("主任)
}else{
if(this.succesor!=null){
cessRequest(request);
publicclassPresidentextendsApprover(
publicvoidprocessRequest(PurchaseRequestrequest"
if(request.getAmount()<5()()()()()){
System.oW.println("董事长");
}else{
if(this.succesor!=null){
ccssRcqucst(rcqucst);
)
}
)
I
publicclassVicePresidentextendsApprover{
publicvoidproccssRcqucst(PurchascRcqiicstrequest){
if(request.getAmount()<100000)!
System.o〃£println("副董事长)
}else{
if(this.succesor!=null){
cessRequest(request);
)
}
I
2.类图:
实现代码:
publicabstractclassAbstractCommand{
publicabstractvoidopen();
publicabstractvoidclose();
publicclassSwitch{
privateAbstraclCommandcommand;
publicvoidsecCommand(AbstractCommandcommand){
thismand=command;
)
publicvoidopen(){
command.opcn();
)
publicvoidclose(){
command.closeO;
)
)
publicclassFun{
publicvuidupcn(){
System.o〃£.println("开风扇”);
I
publicvoidclose(){
System.oW.println("关风扇)
I
)
publicclassLight{
publicvoidopen(){
System.oW.println("打开");
)
publicvoidclose(){
System.o〃Lpriniln("关灯");
}
)
publicclassFunCommandextendsAbstractCommand{
privateFunfun=newFun();
@Override
publicvoidopen(){
//TODOAuto-gencratcdmethodstub
fun.open();
)
©Override
publicvoidclose(){
//TODOAuto-generatedmethodstub
fun.closc();
publicclassLightCommandextendsAbstractCommand(
privateLightlight=newLight();
@Override
publicvoidopen(){
//TODOAuto-generatedmethodstub
light.open();
)
©Override
publicvuidulusc(){
//TODOAuto-generatcdmethodstub
light.close();
1
3.类图:
实现代码:
publicinterfaceCommand{
publicvoidcxcute();
I
publicclassMenuitem(
privateStringname;
privateCommandcommand;
publicMenuItem(Stringname){
=name;
}
publicStringgetName(){
returnname;
}
publicvoidsetName(Stringname){
this.name=name;
}
publicCommandgetCommand(){
returncommand;
)
publicvoidsetCommand(Commandcommand){
thismand=command;
publicvoidclick(){
command.excute();
I
)
importjava.utiLArrayList:
publicclassMenu{
publicArrayListitcmList=newArrayListQ;
publicvoidaddMenuItem(Menu!temilem){
itemList.add(item):
)
I
publicclassOpenCommandimplementsCommand{
privateBoardScreenscreen;
publicOpenComniand(BoardScreenscreen){
super();
this.screen=screen;
)
@Ovcrridc
publicvoidexcute(){
//TODOAuto-generatedmethodstub
screen.opcn();
publicclassCrealeCommandimplementsCommand{
privateBoardScreenscreen;
publicCreatcCommand(BoardScreenscreen){
super();
this.screen=screen;
)
@Override
publicvoidexcute(){
//TODOAuto-generatedmethodstub
screen.create();
publicclassEidtCommandimplementsCommand{
privateBoardScreenscreen;
publicEidtCommanc(BoardScreenscreen){
super();
this.screen=screen;
}
©Override
publicvoidexcute(){
//TODOAuto-generatedmethodstub
scrccn.cdit();
publicclassBoardScreen{
privateMenumenu;
privateMcnultemopenitem,createltcm,editltem;
publicBoardScreen。{
menu=newMenu();
openItem=newMenuitem("打开”);
createltem=newMenuitem("新建");
edititem=newMenuitem("编辑");
menu.addMenuItem(openltein);
menu.addMenukem(createltem);
menu.addMenuItem(edidlem);
}
publicvoiddisplay(){
System.oW.prinUn("主菜单项选择项:");
for(Objectobj:menu.itemList){
System.OM/.printIn(((MenuItem)obj).getName());
)
)
publicvoidopcn(){
System.o〃£.priniln("显示打开窗口!");
I
publicvoidcreate(){
System.o〃f.prinUn("显示新建窗口!");
publicvoidedit(){
Systcm.oW.println("显示编辑窗口!");
publicMenugetMenu(){
returnmenu;
I
4.类图:
实现代码:
publicinterfaceInvestor{
publicvoidresponsesStocksick);
)
publicclassConcreteinvestorimplementsInvestor{
privateStringname;
publicConcreieInvesior(Siringname){
super();
=name;
}
©Override
publicvoidresponsesStockstock){
//TODOAuto-genera(edmethodstub
System.oz/Z.println(name+":");
Systcm.oi〃.prinUn(stock.getStockNamcO+”涨幅超过5%");
System.ou/prinlln("新价格"+slock.ge〔Price());
importjava.ulil.ArrayList;
publicclassStock{
privateArrayList<Investor>investors;
privateStringstockNamc;
privatedoubleprice:
publicStock(StringstockName,doubleprice){
super();
this.stockName=stockName;
this.price=price;
investors=newArrayList<Investoi>();
I
publicvuida(lacli(Iiivc»loiinvcslui){
investors.add(investor);
I
publicvoiddetach(Investorinvestor)!
investors.remove(investor);
I
publicvoidnotifyInvestor(){
for(Objectobj:investors)!
((Invcstor)obj).rcsponse(this);
)
}
publicStringgetStockName(){
returnstockNanie;
}
publicvoidsetS(ockName(SlringstockNaine){
this.stockName=stockNaine;
)
publicdoublegetPrice(){
returnprice;
)
publicvoidsctPricc(doubleprice){
doublerange=Ma【h”加(price-this.price)/this.price;
this.price=price;
if(range>=0.05)|
this.notifylnvestorO;
publicclassClient{
publicstaticvoidmain(String[]args){
InvestorinvestorI,investor2;
investor1=newConcreteinvestor("哈哈”);
investor2=newConcrctelnvestor("呵呵)
Stockhaicr=newStock("haicr",20.00);
haier.at(ach(investorl);
haier.attach(investor2);
haier.setPrice(25.OO);
I
5.类图:
Cautionl.ightInsulatedDoor
♦flicker():void+close0:void
AnnunciatorSecurityDoor
4sial'll0:void・open():void
实现代码:
publicinterfaceAlarmListcncr{
publicvoidresponse。;
}
publicclassAnnunciatorimplementsAlarmListener{
privateAnnunciatorannunciator;
(a)Ovcnidc
publicvoidresponse。{
//TODOAuto-generatedmethodstub
annunciator.alarmO;
I
publicvoidalarm(){
Sysiem.o〃£.priniln("报警器警报");
I
publicclassCautionLightimplementsAlarmListener{
privateCautionLightlight;
©Override
publicvoidresponse]){
//TODOAuto-generatedmethodstub
light.flickcrO;
)
publicvoidflicker。(
System.oW.println("警示灯闪烁");
publicclassInsuiatcdDoorimplementsAlarmListener{
privateInsuiatcdDoorinsulatcdDoor;
(©Override
publicvoidresponsei){
//TODOAuto-generatcdmethodstub
insulatedDoor.close();
I
publicvoidclose(){
System.o〃f.println("隔热门关闭");
publicclassSecurityDoorimplementsAlarmListener{
privateSecurityDoorsecurityDoor;
@Ovcrridc
publicvoidresponse]){
//TODOAuto-generatcdmethodslub
securityDoor.open();
)
publicvoidopen(){
System.oW.prinUn("安全门启动");
)
)
importjava.util.ArrayList;
publicclassThermosensor{
privateArrayList<AlarmListcncr>alarm;
publicvoidattach(AlarmListenerlistener){
alarm.add(listener);
I
publicvoiddetach(AlarmListenerlistener){
alarm.rcniove(listcner);
)
publicvoidnotifyAlarni(){
for(Objectobj:alarm){
((AlarmLis(ener)obj).response();
)
I
6.类图:
MovieTicket
-price:doubleo-Discount
-discount:Discount>-----------------------------
+setPrice(doubleprice):void
♦calculate(doubleprice):double
+setDiscount(Discountdiscount):void
+getPrice0_______________:double
StudenlDiscountVlPDiscount
ChiIdrenDiscounl
实现代码:
publicinterfaceDiscount{
publicdoublecalculate(doubleprice);
}
publicclassCIPDiscountimplementsDiscount{
©Override
publicdoublecalcuiatc(doubleprice){
//TODOAuto-generatedmethodslub
System.o〃f.println("增长积分!");
returnprice*0.5;
I
publicclassMovieTicket{
privatedoubleprice:
privateDiscounldiscount,
publicdoublegetPrice(){
returndiscount.calculate(price);
)
publicDiscountgctDiscount(){
returndiscount:
}
publicvoidsetDiscounl(Discoun(discount){
this.discount=discount;
publicclassChildrcnDiscountimplementsDiscount{
©Override
pu
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- T/CSAE 410-2025温室气体 产品碳足迹量化方法与要求 电动乘用车
- T/UNP 161-2024Mini LED室内商用显示屏先进性评价
- T/GFOA 001-2023展览业数据采集规范
- T/CI 608-2024碳化硅衬底生产工艺技术规范
- T/CADBM 84-2024建筑冷热水输送用不锈钢波纹软管及管件安装验收规范
- T/CSA 083-2024室内调光照明产品节律光谱技术评价规范
- 2025~2026学年甘肃定西市陇西县度北师大版第一册一年级数学阶段学情自测卷【附答案】
- 上海市金山区2027届数学九年级第一学期期末学业质量监测试题含解析
- 2026学年陕西省延安市一年级语文期末自测盲点排查题(详细参考解析)详细答案和解析
- Photoshop四级职业技能考试模拟试卷(含详细答案解析)
- 装修施工资料员培训课件
- 2026湘钢校招笔试历年参考题库附带答案详解
- 抗菌药物在特殊人群(肝肾功能不全)中的应用
- 思想政治教育学原理知识点总结
- 民族英雄戚继光课件
- 常见体表肿物课件
- 警容风纪培训课件
- 冠心病的介入手术术后护理
- 2025内蒙古巴彦淖尔市能源(集团)有限公司招聘笔试历年参考题库附带答案详解
- (高清版)DG∕TJ 08-15-2020 绿地设计标准 附条文说明
- 建鱼池合同协议
评论
0/150
提交评论