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

下载本文档

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

文档简介

软件体系结构与设计模式实验10实验报告1、某公司欲开发一套机房监控系统,如果机房达到某一指定温度,传感器将作出反应,将信号传递给响应设备,如警示灯将闪烁、报警器将发出报警、安全逃生门将自动开启、隔热门将自动关闭等,每一种响应设备的行为由专门的程序来控制,采用观察者模式来设计该系统。(1)UML类图RoomSubject^observers:ArrayList■tenrsRnL■■底:RoomSubject^observers:ArrayList■tenrsRnL■■底:float+attach(£en&arEEfisor)+deta£h(Sensoirsensorj(2)实现代码packagequestionl;importjava.util.ArrayList;/**^^Description:*@Author:Xxx*@Date:2020年5月11日**/publicabstractclassRoomSubjectprotectedArrayListobservers=newArrayList<>();privatefloattemperature;publicvoidsetTemperature(floattemperature){this.temperature=temperature;}publicfloatgetTemperature(){returntemperature;}publicvoidattach(Sensorsensor)(observers.add(sensor);}publicvoiddetach(Sensorsensor)(observers.remove(sensor);}publicabstractvoidcheckTemperature(floattemperature);}packagequestion】;/**^^Description:*@Author:Xxx*@Date:2020年5月11日**/publicclassTemperaturecontrollerextendsRoomSubject(©OverridepublicvoidcheckTemperature(floattemperature)(if(temperature>39){System.out.println(-机房温度已超过正常温度,目前达到"+temperature+"C");for(Objectobject:observers){((Sensor)object).response();}}else(System.out.println("机房当前温度为"+temperature+”,在正常范围,无需发布任何提醒!”);}}}packagequestion1;/***@Description:*@Author:Xxx*@Date:2020年5月11日**/publicinterfaceSensor{voidresponse();}packagequestionl;/**^^Description:*@Author:Xxx*@Date:2020年5月11日**/publicclassAlertorimplementsSensor{©Overridepublicvoidresponse(){System.out.println("报警器正在发出报警声!");}}packagequestionl;/***@Description:*@Author:Xxx*@Date:2020年5月11日**/publicclassWarnningLightimplementsSensor{©Overridepublicvoidresponse(){System.out.println("警示灯正在闪烁!”);}}packagequestion1;/***@Description:*@Author:Xxx*@Date:2020年5月11日**/publicclassEscapeDoorimplementsSensor(©Overridepublicvoidresponse(){System.out.println("安全逃生门已打开!”);packagequestionl;/**^^Description:*@Author:Xxx*@Date:2020年5月11日**/publicclassHeatlsolationDoorimplementsSensor{©Overridepublicvoidresponse(){System.out.println("隔热门已关闭!”);}}(3)测试代码packagequestionl;/***@Description:*@Author:Xxx*@Date:2020年5月11日**/publicclassClient{publicstaticvoidmain(String[]args){RoomSubjectsubject=newTemperatureController();Sensoralertor,light,escapeDoor,heatIsolationDoor;alertor=newAlertor();light=newWarnningLight();escapeDoor=newEscapeDoor();heatlsolationDoor=newHeatIsolationDoor();subject.attach(alertor);subject.attach(light);subject.attach(escapeDoor);subject.attach(heatlsolationDoor);subject.checkTemperature(42);}(4)结果截图机房温度己拼过正常温度,目沛达到42,0^报警器正在发出报警声!警示灯正在闪烁!安全逃生门已打开!隔热门己关闭!正常温度:subject.checkTemperature(34);机房当前温度为34.。,在正常范围,无需发布任何提醒I2、Strategy模式的应用某公司专门销售各种打印机,销售打印机时都有一定的折扣让利给顾客,但折扣计算的方法有很多种,如:不打折;每台减扣固定的金额;按售价的5%打折等等,且折扣计算方法可能发生变化。现在要开发该公司的销售系统,实现打印机销售时的价格计算。要求:请用strategy模式设计解决方案。方案要能够使得在销售打印机(即使是同一种打印机)时可以灵活的选用价格计算方法,并且可以很容易地增加或修改价格计算方法而不至于对整个系统的维护造成困难。实验报告中要求包含设计方案的类图,并给出相应的Java源程序。(1)UML类图(2)实现代码packagequestion2;/**^^Description:*@Author:Xxx*@Date:2020年5月18日**/publicabstractclassSaleStrategy{publicabstractvoiddoDiscount();}packagequestion2;/***@Description:*@Author:Xxx*@Date:2020年5月18日**/publicclassNoDiscountextendsSaleStrategy{privatefloatprice;publicvoidsetPrice(floatprice){this.price=price;}publicfloatgetPrice(){returnprice;}©OverridepublicvoiddoDiscount(){");System.out.println("不打折!每台减扣"+this.getPrice()+"");}}packagequestion2;/***@Description:*@Author:Xxx*@Date:2020年5月18日**/publicclassPercentDiscountextendsSaleStrategy{privatefloatdiscountPercent;publicvoidsetDiscountPercent(floatdiscountPercent){this.discountPercent=discountPercent;}publicfloatgetDiscountPercent(){

returndiscountPercent;}©OverridepublicvoiddoDiscount(){System.out.println("按售价”+this.getDiscountPercent()+"%打折");}}packagequestion2;/**^^Description:*@Author:Xxx*@Date:2020年5月18日**/publicclassContext{privateSaleStrategysalestrategy;publicContext(SaleStrategysalestrategy){this.salestrategy=saleStrategy;}publicvoiddoDiscount()(this.saleStrategy.doDiscount();}}(4)测试代码packagequestion2;/***@Description:*@Author:Xxx*@Date:2020年5月18日**/publicclassClient{publicstaticvoidmain(String[]args){// 不打折;每台减扣固定的金额SaleStrategysaleStrategy=newNoDiscount();((NoDiscount)saleStrategy).setPrice(50);Contextcontext=newContext(saleStrategy);context.doDi

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论