软件体系结构设计模式实验二全解_第1页
软件体系结构设计模式实验二全解_第2页
软件体系结构设计模式实验二全解_第3页
软件体系结构设计模式实验二全解_第4页
软件体系结构设计模式实验二全解_第5页
已阅读5页,还剩15页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

《软件体系构造》

试验汇报

项目名称设计模式试验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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论