《软件设计模式》课程实验报告-实验12-观察者模式-学号姓名-副本_第1页
《软件设计模式》课程实验报告-实验12-观察者模式-学号姓名-副本_第2页
《软件设计模式》课程实验报告-实验12-观察者模式-学号姓名-副本_第3页
《软件设计模式》课程实验报告-实验12-观察者模式-学号姓名-副本_第4页
《软件设计模式》课程实验报告-实验12-观察者模式-学号姓名-副本_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

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

文档简介

1、幼而福州理工学浣FUZHOU INSTITUTE OF TECHNOLOGY课程名称专业班级姓名学号指导老师日期福州理工学院工学院二。一七年三月实验12 观察者模式的应用、实验目的1 .理解观察者模式的定义2 .掌握观察者模式的结构类图和典型代码、实验准备与环境1.实验准备观察者模式类图Sufcjecl+ update i;abs updtef):+ attach (Observer ote)+ detacti (Observer cbs) 4. notify 0fcr(ob5-Ot»sarrersiObserverConcrete Subject-subjectStete :+ g

2、diState (+ setstate。-$ub)eeiGgrreteOtxrver cbsen/er State :return 莒ubjmHS怕怕obs e n erState=$ubjec t.getsiatej;2.实验环境StarUML (或 Visio)+Eclipse三、实验要求某在线游戏支持多人联机对战,每个玩家都可以加入某一战队组成联盟,当战队中某一成员受到敌人攻击时将给所有盟友发送通知,盟友收到通知后将作出响应。使用观察者模式设计并实现该过程。绘制类图并编程实现。四、实验步骤package com.test.observer;观察者接口,由观察者来实现public inte

3、rface Observer public String getName();public void setName(String name);public void help();声明支援方法public void beAttacked(Subject sub); 声明遭受攻击方式package com.test.observer;public interface Subject public void join(Observer o);public void quit(Observer o);public void notifyObservers(String name);package

4、com.test.observer;import java.util.ArrayList;public class ConcreteSubject implements Subject private String teamName ;战队名称 private ArrayList<Observer> observers,观察者集合/创建战队public ConcreteSubject(String teamName) System.out.println(teamName+ "战队组建成功!"); System.out.println( "="

5、;);observers =new ArrayList<Observer>();this .teamName =teamName;public String getTeamName() return teamName ;public void setTeamName(String teamName) this .teamName = teamName;添加队友Overridepublic void join(Observer o) System.out.println(o.getName()+ "加入"+this .teamName +"战队!&quo

6、t;); observers .add(o);注销观察者Overridepublic void quit(Observer o) System.out.println(o.getName()+ "退出"+this .teamName +"战队!"); observers .remove(o);Overridepublic void notifyObservers(String name) );System.err.println( this .teamName +"战队消息:队友"+name+"正在求救!for (Objec

7、t obs:observers) if(!(Observer)obs).getName().equalsIgnoreCase(name) (Observer)obs).help();package com.kuang.observer.improve;import com.kuang.observer.CurrentConditions;import java.util.ArrayList;public class WeatherData implements Subject温度气压湿度privatefloattemperature;privatefloatpressure;privatefl

8、oathumidity ;观察者集合private ArrayList<Observer> observers;public WeatherData() observers =new ArrayList<Observer>();public float getTemperature() return temperature ;public float getPressure() return pressure ;public float getHumidity() return humidity ;public void dataChange() notifyObser

9、vers();当数据有更新时,就调用setDatapublic void setDatafloat temperature, float pressure, float humidity) this .temperature = temperature;this .pressure = pressure;this .humidity = humidity; dataChange();注册一个观察者Overridepublic void registerObserver(Observer o) observers .add(o);移除一个观察者Overridepublic void remove

10、Observer(Observer o) if (observers .contains(o) observers .remove(o);public class Client 遍历所有的观察者,并Overridepublic void notifyObservers() for (int i = 0; i < observers .size(); i+) observers .get(i).update(this.temperature ,this .pressure ,this .humidity );package com.test.observer;public class Pl

11、ayer implements Observer private String name;public Player(String name) this .name=name;Overridepublic String getName() return this .name;Overridepublic void setName(String name) this .name=name;Overridepublic void help() System.out.println( this .name + "正在路上,猥琐发育 "); Overridepublic void

12、beAttacked(Subject sub) System.out.println( this .name + "救救我!");sub.notifyObservers( name);package com.test.observer;public static void main(String口 args) / TODO Auto-generated method stub定义观察目标对象Subject s1;s1=new ConcreteSubject("GPL");定义5英雄Observer player1,player2,player3,play

13、er4,player5;player1 = new Player("亚瑟");s1.join(player1);player2= new Player("盘古");s1.join(player2);player3= new Player("后羿");s1.join(player3);player4= new Player("王昭君");s1.join(player4);player5= new Player("百里玄策");s1.join(player5);player1.beAttacked(s1);五、讨论与分析观察者模式的主要的作用就是

温馨提示

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

评论

0/150

提交评论